コマンド置換構文 $() は演算子とみなされますか、それともコマンドとみなされますか?

コマンド置換構文 $() は演算子とみなされますか、それともコマンドとみなされますか?

どちらか一方として言及している公式ドキュメントは見つかりません。コマンドとオペレータの技術的な違いは正確には何ですか?

答え1

POSIXのテキストでは、2.6 単語の拡張チルダ展開、パラメータ展開、算術展開、フィールド分割、パス名展開、引用符削除も行えます。

同様にBashのマニュアルでは、シェル拡張

前者はリダイレクト演算子に「operator」を使用し、、、、、、;などを&使用するため、これらのいずれ|かではありませ&&ん。また、これは明らかにコマンドではないため、用語が重要であるかどうかにかかわらず、どちらでもないと言わざるを得ません。||(

答え2

コマンド:

  • 通常、名前には英数字の文字列が使われます。

  • は外部ユーティリティ、組み込み、または関数のいずれかです。type組み込みが出力を生成するほとんどすべてのものは、その意味ではコマンドです。

  • もっている接頭辞表記。

  • 通常、何らかの I/O を変更します。

オペレーター:

  • 通常はシンボリック文字列であり、名前はありませんが、ニックネームが付いている場合があります。

  • 組み込み関数では理解されませんtype(紛らわしい名前の関数またはスクリプトがない限り)。

  • より頻繁に挿入句またはサフィックス構文。

  • 時には交通警官のようにI/Oを誘導するが、それ。

  • 場合によってはプロセスの順序を指示します。

$()コマンドです代替:

  • まず第一に(あるいは見方によっては最後に)、それは文字列です。
  • 文字列はテキストで構成されています出力その中にリストされているコマンドのうちの。

[シェルの組み込みコマンドです:

  • test必須の接尾辞が付いたコマンドです]

[[シェルのキーワードですbash:

  • これは、より多用途で高速な[組み込みコマンドのようなものですが、対応するようなコマンドがない SFAIK ですtest
  • シェルのキーワードにはtimeforコマンドのように見えますが、区切り文字や構文としてさまざまな兄弟キーワードを必要とする演算子のように動作する や などがあります。このコードは、組み込みtypeの出力に対して組み込みを実行しhelp、左側のキーワードと組み込みのリストを表示します。

    COLUMNS=30 help -m | tail -n +9 | 
    tee >(cut -d ' ' -f2) >(cut -c 17-30 | cut -d ' ' -f1) > /dev/null | 
    sort | sed -n "s/.*/type '&'/e"';/found/!p'
    

話し言葉と比較すると:

  • コマンド (および一部のキーワード) は動詞のようなものです。
  • ファイルと文字列は名詞です。
  • 演算子は句読点や前置詞のようなものです。

抽象的には、演算子は、同様のものに置き換えることができる異なる構文を持つコマンドにすぎません。接頭辞スタイル コマンドを他のコマンドと一緒に使用することはできません。おそらく、それほど便利には使えないでしょう。

分析的に言えば、シェルのコンパイルされたコードは逆アセンブラで実行することができ、演算子はやはり単なるコマンド、つまり一連のアセンブリ言語コマンドになります。

答え3

ユーザーの観点から見ると、コマンド置換は一種のシェル プリミティブです。これはシェルに実装された機能で、いくつかのアクション (サブシェルの起動、コマンドの実行など) を実行し、値 (コマンドの出力) を返します。シェルが展開を実行する前に、コマンド置換は通常、コマンドの引数になります。つまり、ユーザーはシェル機能を使用してシェル プロセスの結果を取得します。

関連情報