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

ora*_*nge 5 bash

例如,使用这个脚本:

#!/bin/bash
for a in $@
do
   echo $a
done
Run Code Online (Sandbox Code Playgroud)

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

x
y
z
Run Code Online (Sandbox Code Playgroud)

并不是:

x y
z
Run Code Online (Sandbox Code Playgroud)


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

我用Bash 4.3.33.

Cyr*_*rus 15

报价$@

#!/bin/bash
for a in "$@"
do
  echo "$a"
done
Run Code Online (Sandbox Code Playgroud)

输出:

xy
z

  • 对于`bash`的某些版本(至少),说`for a`就足够了。它会假设你的意思是`in "$@"`。 (7认同)
  • @orangeorange 您不能安全地在一个普通变量中存储多个参数。但是你可以用 `t=("$@")` 将它们存储在一个数组中,然后将其引用为 `"${t[@]}"` 以完整地恢复原始参数列表。请注意,我使用的*所有*双引号都是必需的。 (2认同)