我正在编辑我的问题。在开始 PERL/tcl 脚本之前,我看到了以下内容
#!/bin/sh
# \
exec tclsh "$0" ${1+"$@"}
package require Expect
我不明白 "exec tclsh "$0" ${1+"$@"}" 这意味着什么。这是 tcl 脚本。我在 PERL 中也注意到了同样的事情。
在 shell 中,$1
是第一个参数并且$@
是所有参数。${FOO+BAR}
表示“如果设置了 $FOO,则使用 BAR。
所以${1+$@}
意味着“所有参数,如果第一个参数被设置”。但这是多余的,不是吗?
GNU Autoconf 手册的 Portable Shell Programming 部分在Shell Substitutions中说:
最著名的 shell 可移植性问题之一与“$@”有关。当没有位置参数时,Posix 说 '"$@"' 应该等同于无,但原始的 Unix 版本 7 Bourne shell 将其视为等同于 '""',[... 长时间讨论血淋淋的细节……]
但这只有在使用双引号时才有意义。在这里,他们似乎被意外遗漏了。