grub
の設定方法を読んでいるときに、次の2つの構文のいずれかを使用する必要があると主張する記事を見つけました。
echo \(hd0,0\) >> /boot/grub/grub.conf
または
echo '(hd0,0)' >> /boot/grub/grub.conf
コマンドラインでは、括弧は特別な方法で解釈されるからです。括弧の何が特別なのですか?彼らはどのように解釈されますか?
括弧は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.
ここで、list
は、通常の一連のコマンドです。
これは実際には非常に移植性があり、bash
だけに固有のものではありません。 POSIXシェルコマンド言語仕様 には、(compound-list)
構文に関する次の説明があります。
サブシェル環境でcompound-listを実行します。 Shell Execution Environment を参照してください。環境に影響を与える変数の割り当てと組み込みコマンドは、リストの終了後も有効になりません。
括弧の間に埋め込まれたコマンドリストは、サブシェルとして実行されます。
サブシェルの変数は、サブシェルのコードブロックの外には表示されません。親プロセス、サブシェルを起動したシェルからはアクセスできません。これらは、事実上、ローカル変数です。
Linuxtopia-Chapter 20. Subshells を参照してください