${1:0:2} 在这种情况下意味着什么?

${1:0:2} 在这种情况下意味着什么?

我正在查看下面显示的代码,它会检查输入是否行/列参数以-ror开头-c${1:0:2}在这种情况下意味着什么?

rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
   echo $correctCmdMsg >&2
   exit 1
fi

答案1

它是 shell 的子字符串扩展(参数扩展的子类)模式。

格式为:

${parameter:offset:length}

并且索引从 0 开始。

假设您有一个变量foo,然后${foo:0:2}生成前两个字符(从位置 0 到下一个 2)。

例子:

$ foo=spamegg
$ echo "${foo:0:2}"
sp

在您的情况下,第一个数字1指的是变量 name $1,它是通过命令行(在主程序中)传递的第一个参数或传递给函数的第一个参数。

所以在你的情况下,"${1:0:2}"将:

  • 开始提取从索引 0 开始的子字符串,即第一个字符

  • 并继续下两个字符

因此,在操作之后,您将获得输入字符串的前两个字符(索引为 0 和 1)。

[ "${1:0:2}" != $rowArgName ]正在[ "${1:0:2}" != $colArgName ]检查输出子字符串是否等于其他一些字符串。

答案2

摘录自man bash

${参数:偏移量:长度}

子串扩展。扩展到从 指定的字符开始length的值的 最多字符。如果参数是、下标为或 的索引数组或关联数组名称,则结果会有所不同,如下所述。如果省略,则扩展为从由 指定的字符开始 并延伸到该值的末尾的 值的子字符串。 和 是算术表达式(请参阅下面的算术评估)。parameteroffset@@*lengthparameteroffsetlengthoffset

答案3

这是从变量中提取简单的子字符串。有问题的变量是脚本的第一个参数(即1)。

如果我有一个变量 FOO,我可以用 看到它的值的前两个字符${FOO:0:2}。在您的示例中,第一个参数也做了同样的事情。

相关内容