我对Bash中的子串有疑问,这对我来说似乎不合时宜。想象一下,我有X="Hello World!"
。然后:
echo ${X:4} # Prints 'o World!'
echo ${X:(-2)} # Prints 'd!'
除了指定的字符外,为什么正整数显示整个字符串,而除了指定的字符外,负字符显示无?
答案 0 :(得分:3)
在bash中有两种方法可以从字符串结尾中偏移。第一个使用括号中的索引:
echo ${X:(-2)} # Prints 'd!'
第二个在space
:
echo ${X: -2} # Prints 'd!'
两者都偏离字符串结尾。对于正和否定情况,打印的内容相同。字符从索引打印到字符串结尾。在否定的情况下,您从字符串结尾偏移2
,然后从该索引打印所有剩余字符。 (最后2个字符)
您可以通过以下方式向自己证明:
echo ${X: -2:1} # Prints 'd'
正索引从字符串开头偏移,负索引从字符串结尾偏移。在这两种情况下,打印的是字符串中的剩余字符,除非在第二个冒号后指定要打印的字符数。 (例如${var:index:nchars}
)