跳过 shell 脚本参数的最便携方法是什么?

跳过 shell 脚本参数的最便携方法是什么?

对于旨在在 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,因此,与首先移出第一个参数类似,当然不实际修改列表。

相关内容