如何遍历保存在变量中的命令行参数?

How to interate through command line arguments saved in a variable?

在我的脚本中的某个时刻,我需要保存所有命令行的值 变量中的参数(经过一些 shifting 之后),它看起来像这样:

foo="$@"

现在我需要通过 foo 变量的参数进行交互,但是它 如果有包含的参数,似乎很难正确地做到这一点 写 space。如果我写

for i in "$foo"
do
    echo "$i"
done

全部打印在一行,说明for认为有 只有一个参数。另一方面:

for i in $foo
do
    echo "$i"
done

似乎做了正确的事,但当有争论时它也失败了 包含写入 space:

$ my_script one two "three four"
one
two
three
four

在此示例中,threefour 应打印在同一行。

如何正确地迭代保存在变量中的参数?

您可以使用 bash 个数组:

foo=("$@")

for i in "${foo[@]}"; do
    echo "$i"
done

这也允许您将单个参数作为 ${foo[0]}${foo[1]} 等寻址,直到 ${#foo[@]},这是数组的长度。

请注意,数组是 bash 特定的(不是 POSIX shell 语言的一部分)。