コマンド置換
コンピューティングでは、 コマンド置換は、コマンドを実行し、その出力を別のコマンドの引数としてコマンドラインに貼り付けることができる機能です。コマンド置換は、1979年にバージョン7 Unixで導入されたBourneシェルで最初に登場し、その後のすべてのUnixシェルの特徴として残っています。この機能は、その後、Perl、PHP、Ruby、Microsoft WindowsのPowershellなど、他のプログラミング言語でも採用されています。また、FORコマンドおよび()コマンドでMicrosoftのCMD.EXEに表示されます。
構文とセマンティクス
シェルは通常、子プロセスを作成して最初のコマンドを実行し、その標準出力をシェルにパイプすることでコマンド置換を実装します。シェルはその出力を読み取り、空白で区切られた単語に解析します。シェルは、パイプが閉じるか、子が終了するまで子からのすべての出力を認識できないため、それまで待機してから、2番目のコマンドを実行する別の子プロセスを開始します。
このCシェルの例は、fgrepを使用して文字列mallocを含むすべてのCファイルを検索し、viエディターを使用して見つかったファイルを編集する方法を示しています。ここに示されている構文表記法 `...`は、区切り文字として逆引用符を使用しており、元のスタイルであり、すべての一般的なUnixシェルでサポートされています。
構文、入力方法、およびセマンティクス、動作の両方に対して異議が提起されました。
対話型コマンドプロセッサの重要な要素である入力は簡単ですが、構文はネストが厄介であると批判されており、左右の区切り文字が同じであるため、あるコマンド置換を別のコマンド置換に入れています。 Kornシェル(ksh)は、変数置換に使用される表記法を借用する代替表記$(...)でこれを解決しました。現在、ほとんどのUNIXシェルはこの構文をサポートしています。 MicrosoftのPowerShellも同じセマンティクスでこの表記を使用します。
出力を空白で単語に分割するセマンティクスも批判されています。ファイル名にスペースが含まれない初期のUnixシステムではうまく機能しましたが、ファイル名にスペースが含まれる可能性のある最新のWindowsおよびLinuxシステムではまったく機能しません。これらの前の例のいずれかで、*。cワイルドカードと一致するファイル名のいずれかにスペースが含まれる場合、そのファイル名は意図したものではなく、viへの2つの別個の引数に分割されます。 Hamilton Cシェルは、改行でのみ単語に解析する二重逆引用符 `` ... ``でこれを解決しました。
これは、PowerShellで()演算子を使用したコマンド置換の例です。
式の置換
関連する機能、式置換は、Common LispおよびSchemeの言語にあり、逆引用符(または「準引用符」)でマークされた式でカンマアット演算子を使用して呼び出され、ABCでは、間に囲まれた式を使用して呼び出されますテキスト表示内の逆引用符(文字列リテラル)。たとえば、ABCコマンドWRITE '2 + 2 = `2 + 2`'は、出力2 + 2 = 4を生成します。