我在 zsh 中写这个命令
pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL}
/root
Desktop Downloads Music Public Templates
Documents for_play Pictures pycharm Videos
/etc
/root
Desktop Downloads Music Public Templates
Documents for_play Pictures pycharm Videos
我用 bash 写的
pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL
/root
Desktop Documents Downloads for_play Music
Pictures Public pycharm Templates Videos
/etc
/root
Desktop Documents Downloads for_play Music
Pictures Public pycharm Templates Videos
0
为什么0没有出现zsh?
答案1
环境中不存在的变量没有任何值,因此没有任何内容可打印。这并不是说变量神奇地获得了 value 0
,如果它们没有定义,那么它们就没有定义:
$ echo "$sandfadsf"
$ sandfadsf=0
$ echo $sandfadsf
0
因此,当运行时bash
,bash 特定的变量BASH_SUBSHELL
被设置并因此具有一个值。运行时zsh
,该变量未设置,它不存在,因此当您运行时echo $BASH_SUBSHELL
,该变量$BASH_SUBSHELL
会扩展为空,因此不会打印任何内容。
您可以通过以下方式查看这一切set -x
:
## bash
$ set -x
$ echo $BASH_SUBSHELL
+ echo 0
0
$ zsh
+ zsh
% set -x
% echo $BASH_SUBSHELL
+zsh:4> echo
%