SHLVL

執行 bash 命令時,將開啟一個新 shell。 $ SHLVL 環境變數儲存當前 shell 執行的 shell 級別數。

新的終端視窗中,執行以下命令將根據正在使用的 Linux 發行版生成不同的結果。

echo $SHLVL

使用 Fedora 25 ,輸出為 3。這表明,在開啟新 shell 時,初始 bash 命令會執行並執行任務。初始 bash 命令執行子程序(另一個 bash 命令),然後執行最終 bash 命令以開啟新 shell。當新 shell 開啟時,它作為 2 個其他 shell 程序的子程序執行,因此輸出為 3

在下面的示例中(假設使用者正在執行 Fedora 25),新 shell 中$ SHLVL 的輸出將設定為 3。執行每個 bash 命令時,$ SHLVL 遞增 1。

~> $ echo $SHLVL
3
~> $ bash
~> $ echo $SHLVL
4
~> $ bash
~> $ echo $SHLVL
5

可以看到執行’bash’命令(或執行 bash 指令碼)會開啟一個新的 shell。相比之下,獲取指令碼會執行當前 shell 中的程式碼。

test1.sh

#!/usr/bin/env bash
echo "Hello from test1.sh. My shell level is $SHLVL"
source "test2.sh"

test2.sh

#!/usr/bin/env bash
echo "Hello from test2.sh. My shell level is $SHLVL"

run.sh

#!/usr/bin/env bash
echo "Hello from run.sh. My shell level is $SHLVL"
./test1.sh

執行:

chmod +x test1.sh && chmod +x run.sh
./run.sh

輸出:

Hello from run.sh. My shell level is 4
Hello from test1.sh. My shell level is 5
Hello from test2.sh. My shell level is 5