- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在学习 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 行的命令不是在 subshell 中执行的吗?我不知道我哪里误解了。
最佳答案
您实际上需要在这里使用 $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
保持不变。
关于linux - $SHLVL 不增加 ( echo $SHLVL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48226111/
我正在学习 shell 脚本并坚持使用这个小的实验性 shell 脚本: #!/usr/bin/env bash A=1 (A=2;echo "A is $A in $SHLVL") echo "A
我最近运行了一个在其中运行“cmd”的第 3 方脚本,从而增加了我的 cmd 窗口的嵌套深度(使我的历史记录和 DOSKey 宏在此过程中不可用)。所以我想知道是否有等效的 $SHLVL 或其他方法来
有人可以解释以下行为吗? $ echo $SHLVL 1 $ zsh -c 'echo $SHLVL' 2 $ zsh -c '(echo $SHLVL)' 1 我不明白最后的结果。 zsh 是否为
我有以下 bash 脚本 (myscript.sh): #!/bin/bash $(echo $0) 现在:在采购 myscript.sh 之前,$SHLVL 是 2。采购之后,是 3。为什么?命令评
我对这两者感到困惑。 While the $BASH_SUBSHELL internal variable indicates the nesting level of a subshell, the
我是一名优秀的程序员,十分优秀!