コマンドラインで括弧はどのように解釈されますか?


45

設定方法を読んでいるgrubと、次の2つの構文のいずれかを使用する必要があると主張する記事に出会いました。

echo \(hd0,0\) >> /boot/grub/grub.conf

または

echo '(hd0,0)' >> /boot/grub/grub.conf

なぜなら、コマンドラインでは、かっこが特別な方法で解釈されるためです。括弧の特別な点は何ですか?それらはどのように解釈されますか?

回答:


46

括弧は、bashのサブシェルを示します。man bashページを引用するには:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

ここで、a listは通常の一連のコマンドです。

これは実際には非常に移植性が高く、特定のものではありませんbashPOSIXシェルコマンド言語の仕様では、のために以下の記述がある(compound-list)の構文を:

サブシェル環境でcompound-listを実行します。シェル実行環境を参照してください。環境に影響を与える変数の割り当てと組み込みコマンドは、リストが終了した後も有効のままではなりません。


bashなどのシェルで...?
jasonwryan

3
bashは私が...について尋ねたものである
スティーブ・ブラウン

5
違いは何だ$()とは()
CMCDragonkai

5
@CMCDragonkai $()はコマンド置換で()あり、サブシェルです。どちらもコマンドを実行しますが、違いは出力に何が起こるかです。名前は、シンボルよりも検索がはるかに簡単です。unix.stackexchange.com/q/213530/9537
jw013

12

括弧の間に埋め込まれたコマンドリストは、サブシェルとして実行されます。

サブシェル内の変数は、サブシェル内のコードブロックの外側からは見えません。親プロセス、サブシェルを起動したシェルからはアクセスできません。これらは、実際にはローカル変数です。

Linuxtopia-第20章を参照してください。サブシェル

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