設定方法を読んでいるgrub
と、次の2つの構文のいずれかを使用する必要があると主張する記事に出会いました。
echo \(hd0,0\) >> /boot/grub/grub.conf
または
echo '(hd0,0)' >> /boot/grub/grub.conf
なぜなら、コマンドラインでは、かっこが特別な方法で解釈されるためです。括弧の特別な点は何ですか?それらはどのように解釈されますか?
設定方法を読んでいる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.
ここで、a list
は通常の一連のコマンドです。
これは実際には非常に移植性が高く、特定のものではありませんbash
。POSIXシェルコマンド言語の仕様では、のために以下の記述がある(compound-list)
の構文を:
サブシェル環境でcompound-listを実行します。シェル実行環境を参照してください。環境に影響を与える変数の割り当てと組み込みコマンドは、リストが終了した後も有効のままではなりません。
$()
とは()
?
$()
はコマンド置換で()
あり、サブシェルです。どちらもコマンドを実行しますが、違いは出力に何が起こるかです。名前は、シンボルよりも検索がはるかに簡単です。unix.stackexchange.com/q/213530/9537
括弧の間に埋め込まれたコマンドリストは、サブシェルとして実行されます。
サブシェル内の変数は、サブシェル内のコードブロックの外側からは見えません。親プロセス、サブシェルを起動したシェルからはアクセスできません。これらは、実際にはローカル変数です。
Linuxtopia-第20章を参照してください。サブシェル