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

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

設定方法を読みながら、grub次の2つの構文のいずれかを使用する必要があるという記事を見つけました。

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

または

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

コマンドラインでは、括弧は特別な方法で解釈されます。括弧の特別な点は何ですか?どう説明しますか?

答え1

括弧は 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一般的なコマンドシーケンスです。

これは実際に移植性に優れていますbash。これPOSIX シェルコマンド言語仕様構文は次のように説明されています(compound-list)

実装する化合物一覧サブシェル環境では、次を参照してください。シェル実行環境。環境に影響を与える変数割り当ておよび組み込みコマンドは、リストの最後まで残してはいけません。

答え2

間にコマンドリストを含める括弧サブシェルとして実行します。

サブシェルの変数は、サブシェルのコードブロックの外側には表示されません。親プロセスと子シェルを開始したシェルからはアクセスできません。実際、これはローカル変数です。

バラよりLinuxtopia - 第20章。サブシェル

関連情報