zsh 和 bash 之间的输出

zsh 和 bash 之间的输出

我在 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

%

相关内容