BASH_SUBSHELL値は変更されませんが、SLVL値が変更されるのはなぜですか? [コピー]

BASH_SUBSHELL値は変更されませんが、SLVL値が変更されるのはなぜですか? [コピー]

bashマニュアルによると

BASH_SUBSHELL シェルがその環境で実行を開始するときは、各サブシェルまたはサブシェル環境に 1 つずつ追加します。初期値は0です。

SHLVL新しい Bash インスタンスが起動されるたびに 1 ずつ増加します。これは、Bashシェルの入れ子の深さを計算するために使用されます。

これら2つの組み込み変数の違いは何ですか?

具体的には、「サブシェルまたはサブシェル環境」と「Bashシェル」の違いは何ですか?

次の例では、の値はBASH_SUBSHELL変わりませんが、の値SHLVLが変わるのはなぜですか?

$ echo $BASH_SUBSHELL
0
$ echo $SHLVL
1
$ bash
$ echo $BASH_SUBSHELL
0
$ echo $SHLVL
2

ベストアンサー1

これはメインシェル内のサブシェルを表します。

比較する

echo "a" $BASH_SUBSHELL "b" $SHLVL

そして

( echo "a" $BASH_SUBSHELL "b" $SHLVL )

または

( ( echo "a" $BASH_SUBSHELL "b" $SHLVL ) ) 

環境変数を設定すると、関数内で役に立ちます。

おすすめ記事