对于旨在在 UNIX 系统上运行的可移植包装脚本(不一定是Linux),该shift
命令是否应该优先于数组语法?
#!/bin/sh
exec command ${1+"$@"}
和....相比:
#!/bin/sh
shift
exec command "$@"
答案1
exec command ${1+"$@"}
与 不一样shift; exec command "$@"
。后者删除了第一个参数,而第一个则没有。
它的作用是仅应用if set${1+"$@"}
的扩展。它在 POSIX 兼容的 shell 中没有什么区别,因为如果没有设置位置参数,则应该扩展为空(如果设置了任何位置参数,则必须如此,列表不能有“洞”),但是据我了解,一些较旧的炮弹可能需要防护装置。"$@"
$1
"$@"
$1
另一方面,在 ksh/zsh/Bash 中,"${@:2}"
将给出从 开始的位置参数$2
,因此,与首先移出第一个参数类似,当然不实际修改列表。