Bash:子串的不规则行为?

时间:2015-11-23 08:44:22

标签: bash

我对Bash中的子串有疑问,这对我来说似乎不合时宜。想象一下,我有X="Hello World!"。然后:

echo ${X:4} # Prints 'o World!'
echo ${X:(-2)} # Prints 'd!'

除了指定的字符外,为什么正整数显示整个字符串,而除了指定的字符外,负字符显示

1 个答案:

答案 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}