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