我很惊讶这个扩展:
当
并且产生字符串“~abc”。但是,我发现如果我确实定义了
事实上,它在算术环境中接受"abc"并执行
它可以获取扩展的最后n+1个字符。我查看了manpage中的“参数扩展”部分,没有提到波浪号。Bash Hackers Wiki只将波浪号作为(同样未记录的)case修饰符进行提及。
这种行为至少可以追溯到3.2.57版本。
我是不是错过了这种子字符串扩展形式的文档,还是根本没有文档记录?
$ echo "${foo:~abc}"
当
foo
未设置时,返回了空字符串。我预期它应该像这样解析:$ echo "${foo:(~abc)}"
并且产生字符串“~abc”。但是,我发现如果我确实定义了
$ foo='abcdefg'
$ echo "${foo:~abc}"
g
事实上,它在算术环境中接受"abc"并执行
"${foo:~0}"
。同样地。$ foo='abcdefg'
$ echo "${foo:~3}"
defg
它可以获取扩展的最后n+1个字符。我查看了manpage中的“参数扩展”部分,没有提到波浪号。Bash Hackers Wiki只将波浪号作为(同样未记录的)case修饰符进行提及。
这种行为至少可以追溯到3.2.57版本。
我是不是错过了这种子字符串扩展形式的文档,还是根本没有文档记录?
:~
不存在,我猜它会被解析为${parameter:offset:length}
子字符串扩展,因为它在语法上最接近,尽管offset
得到了奇怪的值。这就是为什么你得到了一个子字符串。文档在 Bash 参考手册的“Shell 参数扩展” 章节中。 - KurzedMetal