在 bash 中使用 ${1:1}

Mat*_*ven 3 linux bash shell

有人知道${1:1}bash 中的含义吗?

例如:

for (( i=0; $i < ${1:1}; i++ ))
do
    addToList $2
done
Run Code Online (Sandbox Code Playgroud)

Eta*_*ner 5

那是 bash参数扩展

\n

具体来说:

\n
\n
${parameter:offset}\n${parameter:offset:length}\n
Run Code Online (Sandbox Code Playgroud)\n

这称为子串扩展。它从 offset 指定的字符开始扩展到参数值的 length 个字符。如果参数为\xe2\x80\x98@\xe2\x80\x99,则为下标为\xe2\x80\x98@\xe2\x80\x99或\xe2\x80\x98*\xe2\x80\x99的索引数组,或关联数组名称,结果会有所不同,如下所述。如果省略 length,则扩展为参数值的子字符串,从 offset 指定的字符开始,一直延伸到值的末尾。length 和 offset 是算术表达式(参见 Shell 算术)。

\n

以下是一些说明参数和下标数组的子字符串扩展的示例:

\n
$ string=01234567890abcdefgh\n$ echo ${string:7}\n7890abcdefgh\n
Run Code Online (Sandbox Code Playgroud)\n
\n

因此,从1 未指定的第二个字符${1:1}1offsetlength

\n

据推测,这是为了支持采用如下参数的脚本:

\n
./addn -10 A\n
Run Code Online (Sandbox Code Playgroud)\n

将十个A元素添加到addToList正在添加的内容中。

\n

尽管这是一种糟糕的处理方式,除非在此之前已经检查过论证的有效性/合理性。

\n