質問を編集しています。PERL/tcl スクリプトを開始する前に、次のように表示されました。
#!/bin/sh
# \
exec tclsh "$0" ${1+"$@"}
package require Expect
「exec tclsh "$0" ${1+"$@"}」が何を意味するのかわかりませんでした。これは tcl スクリプトです。私がPERLでも気づいたのと同じこと。
シェルで$1
は、 は最初の引数であり$@
、すべての引数です。${FOO+BAR}
「$FOO が設定されている場合、BAR を使用する」ことを意味します。
したがって${1+$@}
、「最初の引数が設定されている場合、すべての引数」を意味します。しかし、それは冗長ですよね?
GNU Autoconf マニュアルの Portable Shell Programming セクションには、Shell Substitutionsで次のように記載されています。
最も有名なシェルの移植性の問題の 1 つは、'"$@"' に関連しています。位置引数がない場合、Posix は '"$@"' は何も等価ではないはずだと言っていますが、元の Unix バージョン 7 の Bourne シェルはそれを代わりに '""' と等価なものとして扱っていました [... 長い議論悲惨な詳細の...]
ただし、これは二重引用符が使用されている場合にのみ意味があります。ここで、それらは偶然に取り残されたようです。