※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプトのコマンド グループ化における変数の有効範囲について教)
シェルスクリプトのコマンド グループ化における変数の有効範囲について教えてください
このQ&Aのポイント
シェルスクリプトのコマンド グループ化における変数の有効範囲について教えてください。
中括弧"{ }"を使うと親プロセス(=その実行中のプロセス)にて実行、小括弧"( )"を使うとサブシェル(=子プロセス)にて実行されると認識しています。
VAR01はシェル変数として作成したにも関わらず、子プロセスである( )内処理にも引き継がれているのはなぜなのでしょうか?
シェルスクリプトのコマンド グループ化における変数の有効範囲について教
シェルスクリプトのコマンド グループ化における変数の有効範囲について教えてください。
中括弧"{ }"を使うと親プロセス(=その実行中のプロセス)にて実行、
小括弧"( )"を使うとサブシェル(=子プロセス)にて実行されると認識しています。
また環境変数は子プロセスに引き継がれ、シェル変数は引き継がれないと認識しています。
以下のシェルスクリプト(Bシェル)でテストしたところ、続くような結果となりました。
~スクリプト内容~
#!/bin/sh
##TEST1
VAR01=AAA
{ echo 中括弧内でVAR01は${VAR01}; }
( echo 小括弧内でVAR01は${VAR01}; )
##TEST2
{ VAR02=BBB; echo 中括弧内でVAR02は${VAR02}; }
echo 外でVAR02は${VAR02}
##TEST3
( VAR03=CCC; echo 小括弧内でVAR03は${VAR03}; )
echo 外でVAR03は${VAR03}
~実行結果~
中括弧内でVAR01はAAA
小括弧内でVAR01はAAA
中括弧内でVAR02はBBB
外でVAR02はBBB
小括弧内でVAR03はCCC
外でVAR03は
VAR02、VAR03の結果は納得できます。
またVAR01が{ }に引き継がれているのも納得できました。
しかし、VAR01はシェル変数として作成した(exportによる環境変数化はしていない)にも関わらず、子プロセスである( )内処理にも引き継がれているのはなぜなのでしょうか?
お礼
trapezium様 お返事おそくなりすみません…。 「環境変数としての引継ぎ」と「展開される変数」という別の観点で考えるべきということなのですね…。 当方、恥ずかしながら本質を的確に理解できなかったかもしれませんが、ご教示頂きありがとうございました。