既存の役立つ回答を補足するため。別の回答を投稿するように私を励ましてくれたQZサポートへの帽子の先端:
ここでは、2つの異なるメカニズムが機能します。
(a)公益事業に関するPOSIXガイドラインからの引用によって回答されている(強調鉱山)
標準ユーティリティの概要が必須のオプション引数[...] を持つオプションを表示する場合、適合アプリケーションは、そのオプションとそのオプション引数に個別の引数を使用するものとします。ただし、準拠する実装では、アプリケーションが、文字を介在させることなく、同じ引数文字列でオプションとオプション引数を指定することも許可するものとします。
言い換えれば、この場合は、ので、-d
オプション引数があるのは必須、次のことができます選択したとして区切り文字を指定するかどうか:
- (s)EITHER:別の引数
- (D)または:値と直接結合します
-d
。
(s)または(d)を選択したら、それはシェルの文字列リテラル解析-(b)-重要です:
同等性は、シェルの文字列リテラル処理によって説明されます。
上記のcut
すべてのソリューションは、それらを見るまでに(各グループで)まったく同じ文字列になります。
それぞれのグループのフォームが最終的に同一である理由は、シェルが文字列リテラルを解析する方法に基づいて、2つあります。
- シェルを指定するリテラル可能であるようにを通じて呼び出さ機構引用取ることができ、いくつかの形式を:
- 一重引用符で囲まれた文字列:内部の内容
'...'
は文字どおりに解釈され、単一の引数を形成します
- 二重引用符で囲まれた文字列:内部の内容
"..."
も単一の引数を形成しますが、補間されます($var
、コマンド置換($(...)
または`...`
)などの変数参照、または算術展開($(( ... ))
)を展開します)。
\
個々の文字の引用:\
単一の文字の前に置くと、その文字はリテラルとして解釈されます。
- 引用は、によって補完された引用符除去シェルはコマンドラインを解析された後、それがあることを意味、削除された引数から引用文字を(囲む
'...'
か、"..."
または\
このように、 -インスタンス)が呼び出されているコマンドは、引用符を見たことがありません。