bash $ {variable [*]}:2中此语法的含义是什么?

时间:2018-07-05 19:52:46

标签: bash

我读了一个bash某人的代码,他写下了这一行:

for f in ${variable[*]}:2

有人可以解释这行是什么意思吗? f可以得到的值的范围是什么?

1 个答案:

答案 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位于花括号之外,因此将其附加到结果的最后一个单词的末尾,而不用更改扩展的行为。