如何遍历保存在变量中的命令行参数?
How to interate through command line arguments saved in a variable?
在我的脚本中的某个时刻,我需要保存所有命令行的值
变量中的参数(经过一些 shift
ing 之后),它看起来像这样:
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
在此示例中,three
和 four
应打印在同一行。
如何正确地迭代保存在变量中的参数?
您可以使用 bash 个数组:
foo=("$@")
for i in "${foo[@]}"; do
echo "$i"
done
这也允许您将单个参数作为 ${foo[0]}
、${foo[1]}
等寻址,直到 ${#foo[@]}
,这是数组的长度。
请注意,数组是 bash 特定的(不是 POSIX shell 语言的一部分)。
在我的脚本中的某个时刻,我需要保存所有命令行的值
变量中的参数(经过一些 shift
ing 之后),它看起来像这样:
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
在此示例中,three
和 four
应打印在同一行。
如何正确地迭代保存在变量中的参数?
您可以使用 bash 个数组:
foo=("$@")
for i in "${foo[@]}"; do
echo "$i"
done
这也允许您将单个参数作为 ${foo[0]}
、${foo[1]}
等寻址,直到 ${#foo[@]}
,这是数组的长度。
请注意,数组是 bash 特定的(不是 POSIX shell 语言的一部分)。