解决方案
要将"$@" 变量存储为数组,您需要将其用() 包装起来,就像使用文字数组一样。
#!/bin/bash
declare -ar Args=("$@");
for arg in "${Args[@]}"; do
echo "${arg}";
done;
示例输出:
$ /home/jason/bourne --help memory "quoted phrase";
--help
memory
quoted phrase
注意:$@ 应该始终用"" 包裹。 (这条规则可能有一个例外,但至少 99.9% 的时间应该遵循它。) 在这种情况下,请使用 ("$@") 而不是 ($@)。
说明
要在 bash 中从头开始创建文字数组,您可以这样做:
declare -ar array=("a" "b" "c d");
"$@" 变量扩展为一个字符串列表,每个字符串都用引号括起来。使用() 包装此列表会将其转换为 bash 数组。
declare -ar array=("$@");
例如,如果"$@" 扩展为"a" "b" "c d",则("$@") 将变为("a" "b" "c d")。
"$@" == "a" "b" "c d"
("$@") == ("a" "b" "c d")
示例
这是一个并排的代码示例。
将/home/jason/bourne 脚本设置为:
#!/bin/bash
declare -ar array=("$@");
for val in "${array[@]}"; do
echo "${val}";
done;
会输出这个:
$ /home/jason/bourne "a" "b" "c d";
a
b
c d
将/home/jason/bourne 脚本设置为:
#!/bin/bash
declare -ar array=("a" "b" "c d");
for val in "${array[@]}"; do
echo "${val}";
done;
会输出同样的东西:
$ /home/jason/bourne;
a
b
c d