ラッパー スクリプト${1:+"$@"}
では、単に"$@"
.
たとえば、http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.shは
exec "$binary" $opts ${1:+"$@"}
誰か${1:+"$@"}
が英語に分解して、それがプレーンよりも優れている理由を説明できます"$@"
か?
ラッパー スクリプト${1:+"$@"}
では、単に"$@"
.
たとえば、http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.shは
exec "$binary" $opts ${1:+"$@"}
誰か${1:+"$@"}
が英語に分解して、それがプレーンよりも優れている理由を説明できます"$@"
か?
「ヒステリックレーズン」、別名歴史的理由。
JesperE(またはシェルパラメーターの拡張に関するBashのmanページ)からの説明は、JesperEの機能について正確です。
$1
存在し、空の文字列でない場合は、引用符で囲まれた引数のリストに置き換えます。20年ほど前に、Bourne Shellの壊れたマイナーなバリアントの中には、引数がない場合に、何も置き換えないという現在の正しい動作ではなく、空の文字列""
を置き換えたものがあります。"$@"
そのようなシステムがまだ使用されているかどうかは、議論の余地があります。
[うーん:その拡張は次の場合には正しく機能しません:
command '' arg2 arg3 ...
このコンテキストでは、正しい表記は次のとおりです。
${1+"$@"}
$1
これは、引数が空であるかどうかに関係なく正しく機能します。そのため、誰かが表記を誤って覚えていて、誤ってバグを導入してしまいました。]
bash の man ページから:
${parameter:+word}
Use Alternate Value. If parameter is null or unset, nothing is
substituted, otherwise the expansion of word is substituted.
したがって、が設定"$@"
されていない限り、 が置換され$1
ます。なぜ彼らがただ使うことができなかったのか、私にはわかりません"$@"
。
Jonathan Lefflerがコメントで言及しman bash
た情報の関連部分を引用すると、次のようになります。
部分文字列の展開を実行しない場合、bash は未設定または nullのパラメーターをテストします。コロンを省略すると、設定されていないパラメータのみがテストされます。
(私のものを強調)