我正在学习shell脚本,并停留在这个小的实验性shell脚本中:

#!/usr/bin/env bash
A=1
(A=2;echo "A is $A in $SHLVL")
echo "A is $A in $SHLVL"
exit 0

毫无疑问,第3行和第4行中的$A彼此不同,这可以解释为这是因为父进程无法读取在子进程(即子 shell 程序)中创建的变量。但是,第3行和第4行中的$SHLVL是相同的,我认为第3行中的$A应该比第4行中的$A大1。难道不是在子shell中执行了第3行中的命令吗?我不知道我在哪里曲解。

最佳答案

实际上,您实际上需要在此处使用$BASH_SUBSHELL而不是$SHLVL
$BASH_SUBSHELL是一个内部变量,指示子 shell 程序的嵌套级别。

将脚本更改为此:

#!/usr/bin/env bash

A=1
(A=2;echo "A is $A in $BASH_SUBSHELL:$SHLVL")
echo "A is $A in $BASH_SUBSHELL:$SHLVL"

现在它将输出:
A is 2 in 1:2
A is 1 in 0:2

您可以看到$BASH_SUBSHELL随着嵌套级别的变化,但是$SHLVL保持不变。

Check this helpful answer for more details

关于linux - $ SHLVL不会增加(echo $ SHLVL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48226111/

10-09 05:51