为什么子字符串变量扩展可以引用没有美元符号的变量?

时间:2019-12-10 02:22:35

标签: bash variable-expansion

在bash中,要获取变量的前4个字符,您可以执行以下操作:

variable='this is a variable'
echo ${variable:0:4}

您可以引用这样的变量,而不是对长度进行硬编码:

length=4
echo ${variable:0:$length}

但是,您似乎也可以将$放在length之外:

echo ${variable:0:length}

您应该能够执行此操作对我来说没有意义,因为我一直认为使用/评估变量时,必须在变量前加上$

在其他语言中,我希望每个:之后的文本是数字或计算结果为数字的表达式。在bash中,length不会得出任何结果,但是$length会得出任何结果。

这令人困惑。有人可以帮助我了解这里的情况吗?

1 个答案:

答案 0 :(得分:0)

通常使用“ $”符号扩展变量是正确的,但是在某些情况下,bash自动扩展变量。例如,在诸如算术或间接扩展的上下文中  (有关更多详细信息,请参见Shell expansion)。  但是,您的情况是简单的算术上下文扩展。