如何以及为什么要使用$ 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脚本,它们现在都在不同的级别上运行。 了解壳级可能非常重要。