如何以及為什麼要使用$ SHLVL變量

$ SHLVL變量用於告訴你有多少個彈殼。 如果你對此感到困惑,那就值得從頭開始。

什麼是殼牌?

shell接受命令並將它們提供給底層操作系統執行。 在大多數Linux系統上,shell程序被稱為BASH(Bourne Again Shell),但也有其他的可用的,包括C Shell(tcsh)和KORN shell(ksh)。

如何訪問Linux Shell

通常作為用戶,您可以通過使用終端仿真程序(如XTerm,konsole或gnome-terminal)與shell程序進行交互。

如果您運行的是Windows管理器(如Openbox)或桌面環境(如GNOME或KDE),則可以從菜單或短劃線中找到終端仿真器。 在許多系統上,快捷鍵CTRL ALT和T也會打開一個終端窗口。

或者,您可以切換到另一個tty(電傳打字機),它可以直接訪問命令行shell。 您可以通過按CTRL ALT和F1或CTRL ALT和F2等來完成此操作。

什麼是殼牌等級

當你在一個shell中運行一個命令時,它運行在一個叫做shell級別的東西上。 在一個shell中,你可以打開另一個使其成為子shell或打開它的shell的shell。

因此,父shell可能被認為是1級shell,而子shell將是2級shell。

如何顯示殼牌等級

根據文章的標題,您應該可以通過使用$ SHLVL變量來分辨出您運行的shell級別。

要查看當前正在運行的shell級別,請輸入以下命令:

echo $ SHLVL

相當有趣的是,如果您在終端窗口中運行上述命令,您可能會驚訝地發現返回的結果為2。

如果你使用tty運行相同的命令,那麼結果是1。

為什麼你可能會問這種情況? 那麼你正在運行的桌面環境正在運行在一個shell之上。 該shell將為級別1.您在該桌面環境中打開的任何終端窗口必須是打開桌面環境的shell的子項,因此shell級別不能從除2之外的任何數字開始。

tty沒有運行桌面環境,因此只是一個1級shell。

如何創建子殼

測試shell和子殼概念的最簡單方法如下。 打開一個終端窗口並輸入以下內容:

echo $ SHLVL

正如我們從終端窗口所了解的,最小外殼級別是2。

現在在終端窗口中鍵入以下內容:

SH

sh命令自己運行一個交互式shell,這意味著您在shell或子shell中使用一個shell。

如果你現在再次輸入:

echo $ SHLVL

您將看到shell級別設置為3.在子shell中運行sh命令將打開子shell的子shell,因此shell級別將位於級別4。

為什麼殼牌等級很重要?

考慮腳本中的變量範圍時,shell級別非常重要。

讓我們從簡單的事情開始:

狗=梅西
迴聲$狗

如果您在shell中運行上述命令,maisie一詞將顯示在終端窗口中。

輸入以下內容打開一個新的shell:

SH

如果你運行這個命令,你會發現實際上沒有返回任何東西:

迴聲$狗

這是因為$ dog變量僅在shell級別2可用。如果輸入exit退出子shell並再次運行echo $ dog,則會再次顯示maisie一詞。

同樣值得考慮一下shell中全局變量的行為。

從一個新的終端窗口開始,輸入以下內容:

出口狗= maisie
迴聲$狗

正如你所期望的,maisie這個詞是顯示出來的。 現在打開一個子shell並再次輸入echo $ dog。 這一次,即使您處於子外殼中,您也會看到maisie這個詞。

原因是導出命令使$ dog變量為全局變量。 即使使用export命令更改子shell中的$ dog變量也不會影響其父shell。

希望從這裡可以看出,在編寫腳本時,了解您正在使用的shell級別具有一定的意義。

我給出的例子非常簡單,但是一個shell腳本調用另一個shell腳本是非常常見的,這個腳本又調用另一個shell腳本,它們現在都在不同的級別上運行。 了解殼級可能非常重要。