关于非交互模式下 bash 行为的问题

关于非交互模式下 bash 行为的问题

我基本上需要了解以下行为:

$ echo $SHELL
/bin/bash
$ bash -c echo $SHELL

bash -c echo $SHELL输出为空白,这让我很困惑,因为我原本以为 SHELL 已经设置好了。对于 $BASH_VERSION 也是如此。

谁可以给我解释一下这个?

谢谢你的时间!

答案1

man bash

   -c        If the -c option is present, then commands are read from  the
             first non-option argument command_string.  If there are argu‐
             ments after the command_string, the  first  argument  is  as‐
             signed  to $0 and any remaining arguments are assigned to the
             positional parameters.

bash -c echo $SHELL里面“第一个非选项参数”echo,而$SHELL被当前交互式 shell 扩展并bash作为位置参数传递给$0。由于echo没有参数本身bash -c echo打印一个空字符串。同时,$0设置为/bin/bash但被忽略。

根据您要做的事情,您可以这样做

bash -c 'echo $SHELL'

其传递echo $SHELL方式为命令字符串到非交互式 bash shell(输出非交互式 shell 的值$SHELL),或者

bash -c 'echo $0' $SHELL

将交互式 shell 的(扩展)传递$SHELL到非交互式 bash shell $0,然后回显其值。

相关内容