linux变量$BASH_SUBSHELL与$SHLVL之间的区别

前端之家收集整理的这篇文章主要介绍了linux变量$BASH_SUBSHELL与$SHLVL之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在两者之间感到困惑.

While the $BASH_SUBSHELL internal variable indicates the nesting level of a subshell,the $SHLVL variable shows no change within a subshell.

它究竟意味着什么?如果我在另一个shell中打开一个shell,$SHLVL的值会递增.不是那个子壳吗?

解决方法

不,手动运行新shell(通过/ bin / sh或/ bin / bash等)不是此上下文中的子shell.

子shell是指shell自己生成一个新的shell实例来处理某些工作.

使用Command Substitution(即$(命令))是一个子shell(就像旧的反引号调用一样).

使用pipeline(即echo’5.1 5.3’| bc -l)为管道的每个组件创建子壳.

使用Process Substitution(即<(command))创建子shell. Grouping commands(即(声明a = 5; echo $a))创建一个子shell.

the background中运行命令(即睡眠1和1)创建子壳.

可能还有其他事情,但这些是常见的情况.

测试这很容易:

$printf "Outside: $BASH_SUBSHELL,$SHLVL\nInside: $(echo $BASH_SUBSHELL,$SHLVL)\n"
Outside: 0,1
Inside: 1,1
$(printf "Outside: $BASH_SUBSHELL,$SHLVL)\n")
Outside: 1,1
Inside: 2,1
$bash -c 'printf "Outside: $BASH_SUBSHELL,$SHLVL)\n"'
Outside: 0,2
Inside: 1,2
$bash -c '(printf "Outside: $BASH_SUBSHELL,$SHLVL)\n")'
Outside: 1,2
Inside: 2,2

您的报价来源(通常很差,通常更好地避免,ABS)甚至可以证明这一点(并且以一种相当不清楚的方式,只是“高级”指南中普遍缺乏严谨性和质量的另一个例子):

06001

猜你在找的Linux相关文章