避免Bash循环中的通配符扩展

时间:2012-11-07 13:01:06

标签: bash list shell for-loop wildcard

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

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*

我该如何做到这一点?

2 个答案:

答案 0 :(得分:4)

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

A="a* b*"

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

答案 1 :(得分:4)

使用数组:

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