我正在学习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/