为什么 $@ 在传递字符串时不起作用?

为什么 $@ 在传递字符串时不起作用?

例如,使用此脚本:

#!/bin/bash
for a in $@
do
   echo $a
done

运行:./script "x y" z返回:

x
y
z

并不是:

x y
z


这是为什么?
我如何将带有空格的字符串参数传递给 bash?

我用Bash 4.3.33

答案1

引用$@

#!/bin/bash
for a in "$@"
do
  echo "$a"
done

输出:

XY
z

答案2

请注意,在处理时$@您可以将其简化为

for a
do
   echo "$a"
done
如果“用言语...;”不存在,则假定为“in "$@"”。

相关内容