【问题标题】:Avoiding wildcard expansion in Bash loop [duplicate]避免 Bash 循环中的通配符扩展
【发布时间】:2012-11-07 13:01:06
【问题描述】:

我想使用列表作为 for 循环的参数;但是 带有 双引号,列表不被理解为列表,而 没有 引号,通配符被评估为文件名。

A="a* b*"

for ex in "$A"; do
    echo "$ex";
done

for ex in $A; do
    echo "$ex";
done

第一个打印:

a* b*

后者打印:

a.txt
b.txt

我想要:

a*
b*

我怎样才能做到这一点?

【问题讨论】:

  • errr...我觉得我快瞎了...这两个循环有什么区别?
  • thkala,同意。大概其中一个不应该有 $A 用 dbl-quotes 包围。祝大家好运。

标签: bash list shell for-loop wildcard


【解决方案1】:

您可以set -f 禁用路径名扩展:

A="a* b*"

( set -f
  for ex in $A ; do
      echo "$ex"
  done
)

【讨论】:

    【解决方案2】:

    使用数组:

    A=("a*" "b*")
    for ex in "${A[@]}"; do
        echo "$ex"
    done
    

    【讨论】:

    • 错字:for x 应该是for ex
    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2020-08-12
    • 2011-03-20
    相关资源
    最近更新 更多