【发布时间】:2019-12-10 02:22:35
【问题描述】:
在 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 会。
这令人困惑。有人可以帮我理解这里发生了什么吗?
【问题讨论】:
-
这个技巧也一样:在这种情况下也不需要印记'$':
x=( a b c ); echo ${x[RANDOM % 3]} -
@sergio 这描述了间接扩展,由
!调用(如${!varname}),这与算术上下文中的自动扩展有很大不同。 -
@Gordon,这就是答案 - 我认为它不应该是评论。
-
@GordonDavisson 谢谢!在某个地方是否有完整的列表,这些地方被认为是算术上下文?算术上下文是 shell 自动扩展变量的唯一地方还是其他地方?