1

我想使用列表作为 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*

我怎样才能使这项工作?

4

2 回答 2

5

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

A="a* b*"

( set -f
  for ex in $A ; do
      echo "$ex"
  done
)
于 2012-11-07T13:41:40.737 回答
4

使用数组:

A=("a*" "b*")
for ex in "${A[@]}"; do
    echo "$ex"
done
于 2012-11-07T13:46:27.903 回答