为什么在:和之间添加空格会-1改变下面显示的行为?
(ins)$ set a b c d
(ins)$ echo ${@:-1}
a b c d
(ins)$ echo ${@: -1}
d
(ins)$
Run Code Online (Sandbox Code Playgroud)
同样的行为也会影响$*.
我跑GNU bash, version 4.4.5(1)-release (x86_64-unknown-linux-gnu).
为避免参数扩展模式的模糊:
${parameter:-word}
Run Code Online (Sandbox Code Playgroud)
这意味着替换wordif参数的扩展是unset或null; 否则参数的扩展被替换.
因此,对于切片操作,使用空格或括号:
$ set a b c d
$ echo "${@: -1}"
d
$ echo "${@:(-1)}"
d
Run Code Online (Sandbox Code Playgroud)