web-dev-qa-db-ja.com

コマンドの$()とは何ですか?

Linuxシェルコマンドの$()とは何ですか?

例えば:

chmod 777 $(pwd)
19

それはバックティックに非常に似ています」。

コマンド置換posix仕様 )と呼ばれ、サブシェルを呼び出します。 $()の中括弧またはバッククォート( ``)の間のコマンドはサブシェルで実行され、出力は元のコマンドに配置されます。

バックティックとは異なり、$(...)フォームはネストできます。したがって、別の置換の中でコマンド置換を使用できます。

置換内のエスケープ文字には阿蘇の違いがあります。私は$(...)フォームを好みます。

22
chaos

POSIXまたはPOSIXのようなシェル(kshbashashzshyash...)では、次のようになります。 _``_:$()内のコマンドが実行され、その標準出力に置き換えられます。 $()が二重引用符で囲まれていない限り、単語分割とファイル名の生成は行われます。したがって

_chmod 777 $(pwd)
_

置き換えられるべきです:

_chmod 777 "$(pwd)"
_

現在の作業ディレクトリパスでの単語分割とファイル名生成を回避する。

またはさらに良い(ディレクトリの名前が変更されている場合に備えて、zshなどの一部のシェルの下を除く):

_chmod 777 "$PWD"
_

_$PWD_はPOSIXシェルの現在の作業ディレクトリへのパスを保持する特別な変数なので、.

またはさらに良い:

_chmod 777 .
_

現在のディレクトリの_._エントリは、そのディレクトリ自体へのハードリンクであるためです。

5
vinc17

この$()は、他のコマンドの内部でコマンドを実行するために使用されます。

chmod 777 $(pwd)

pwdコマンドは、現在の作業ディレクトリを提供します。したがって、全体が実行されると、pwdの出力はその位置を置き換え、chmodへの引数として機能します。その結果、現在のすべての作業ディレクトリに権限が付与されます777実稼働環境では絶対に使用しないでください;)。

3
beginer