コマンド置換サブシェルの bash 変数の可視性

コマンド置換サブシェルの bash 変数の可視性

Linuxシェルスクリプトブックを読んで、次の警告が見つかりました。

「コマンド置換は、組み込みコマンドを実行するためのサブシェルであることを生成します。サブシェルは、スクリプトを実行するシェルによって生成された別のサブシェルです。したがって、スクリプトによって生成されたすべての変数はサブシェルコマンドには使用できません」

現在、bashシェルのCLIから変数を作成し、サブシェルに移動して画面に印刷できることを確認しました。はい、できません。上記の引用に基づいているようです。しかし、コマンドの置き換えで次のスクリプトを実行しました。

#!/bin/bash
var=5.5555
ans=$(echo $var)
echo $ans

結果:

5.5555

私が理解したのは、サブシェルが「見る」ことができないため、varの値を印刷してはいけません。なぜこれが起こるのですか?

ベストアンサー1

声明:

したがって、スクリプトによって生成されたすべての変数はsubshel​​lコマンドでは使用できません。

偽です。親シェルで定義されている変数の範囲は、スクリプト全体(コマンド置換によって生成されたサブシェルを含む)です。

ランニング:

#!/bin/bash
var=5.5555
ans1=$(echo $var)
ans2=$(var=6; echo $var)
echo $ans1
echo $ans2

結果は次のとおりです。

5.5555
6

$varサブシェルで解決済み:

  • ローカル変数を指定しない場合、3 つのグローバル変数の値が使用されます。
  • ローカル変数が指定された場合は、その値を使用します。

また見てください例21-2

おすすめ記事