无法理解exec tclsh“$ 0”$ {1 +“$ @”}

时间:2013-06-25 08:52:26

标签: shell tcl

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

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

我没有得到“exec tclsh”$ 0“$ {1 +”$ @“}”这意味着什么。这是tcl脚本。同样我在PERL中也注意到了。

1 个答案:

答案 0 :(得分:1)

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

所以${1+$@}表示“所有参数,如果设置了第一个参数”。但那是多余的,不是吗?

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

  

最着名的shell可移植性问题之一与“$ @”相关。当没有位置参数时,Posix说“$ @”应该等同于什么,但最初的Unix版本7 Bourne shell将它视为等同于“”“,[...一个长时间的讨论血淋淋的细节...]

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