我读了一个bash某人的代码,他写下了这一行:
for f in ${variable[*]}:2
有人可以解释这行是什么意思吗? f
可以得到的值的范围是什么?
答案 0 :(得分:4)
给出的代码是一个错误的尝试,它试图跳过前两个参数来扩展数组。
更正后的版本将遍历"${variable[@]:2}"
,并用引号(和:2
放在花括号内而不是花括号外),如下所示:
variable=( "first argument" "second argument" "third argument" "fourth argument" "fifth argument" )
printf '%s\n' "${variable[@]:2}"
...正确发射:
third argument
fourth argument
fifth argument
正如已经编写的那样,代码的行为如下(以下情况甚至不是最坏的情况,其中字符串将包含glob):
variable=( "first argument" "second argument" "third argument" "fourth argument" "fifth argument" )
printf '%s\n' ${variable[*]}:2 ## THIS IS BUGGY
...发出以下内容的输出:
first
argument
second
argument
third
argument
fourth
argument
fifth
argument:2
由于缺少引号(以及使用[*]
而不是[@]
),因此各个单词不能保持在一起;并且由于:2
位于花括号之外,因此将其附加到结果的最后一个单词的末尾,而不用更改扩展的行为。