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

Fer*_*ndo 1 bash shell for-loop list wildcard

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

A="a* b*"

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

for ex in $A; do
    echo "$ex";
done
Run Code Online (Sandbox Code Playgroud)

第一个打印:

a* b*
Run Code Online (Sandbox Code Playgroud)

后者打印:

a.txt
b.txt
Run Code Online (Sandbox Code Playgroud)

我想要:

a*
b*
Run Code Online (Sandbox Code Playgroud)

我该如何进行这项工作?

cho*_*oba 5

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

A="a* b*"

( set -f
  for ex in $A ; do
      echo "$ex"
  done
)
Run Code Online (Sandbox Code Playgroud)