gpt4 book ai didi

linux - $SHLVL 不增加 ( echo $SHLVL)

转载 作者:IT王子 更新时间:2023-10-29 01:25:30 26 4
gpt4 key购买 nike

我正在学习 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 应该大于 $A 第 4 行第 1 行。第 3 行的命令不是在 subshel​​l 中执行的吗?我不知道我哪里误解了。

最佳答案

您实际上需要在这里使用 $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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com