-1

我正在编辑我的问题。在开始 PERL/tcl 脚本之前,我看到了以下内容

#!/bin/sh
# \
exec tclsh "$0" ${1+"$@"}
package require Expect

我不明白 "exec tclsh "$0" ${1+"$@"}" 这意味着什么。这是 tcl 脚本。我在 PERL 中也注意到了同样的事情。

4

1 回答 1

1

在 shell 中,$1是第一个参数并且$@是所有参数。${FOO+BAR}表示“如果设置了 $FOO,则使用 BAR。

所以${1+$@}意味着“所有参数,如果第一个参数被设置”。但这是多余的,不是吗?

GNU Autoconf 手册的 Portable Shell Programming 部分在Shell Substitutions中说:

最著名的 shell 可移植性问题之一与“$@”有关。当没有位置参数时,Posix 说 '"$@"' 应该等同于无,但原始的 Unix 版本 7 Bourne shell 将其视为等同于 '""',[... 长时间讨论血淋淋的细节……]

但这只有在使用双引号时才有意义。在这里,他们似乎被意外遗漏了。

于 2013-06-25T09:39:12.983 回答