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


18

$()Linuxシェルコマンドには何がありますか?

例えば:

chmod 777 $(pwd)

1
line shell commandのようなものはないことに注意してください。Linuxで使用できるシェルアプリケーションは多数あります。
ステファンシャゼル14

回答:


21

バックティックに非常に似ています ``。

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

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

置換内のエスケープ文字には、麻の違いがあります。$(...)フォームが好きです。


4
バックティックもネストできます。コマンドの出力から末尾の改行文字が削除されることに注意してください。
ステファンシャゼル14

2
@StéphaneChazelasバックティックはどのようにネストできますか?逃げるという意味ですか?
カオス14

3
はい:等とecho `echo \`echo foo\`` bar
ステファンChazelas

1
バックティックは非推奨であると言っている公式リファレンスはありますか?
vinc17 14

1
この答えを見つけました:unix.stackexchange.com/questions/126927 / ...それらは非推奨ではないようです。私の答えを変えました、ありがとう
カオス14

5

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

chmod 777 $(pwd)

次のものに置き換える必要があります。

chmod 777 "$(pwd)"

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

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

chmod 777 "$PWD"

以来は、$PWDPOSIXシェルにおける現在の作業ディレクトリへのパスを保持している特殊な変数です。

またはさらに良い:

chmod 777 .

以来.、現在のディレクトリ内のエントリは、そのディレクトリ自体へのハードリンクです。


2

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

chmod 777 $(pwd)

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.