我基本上需要了解以下行为:
$ 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
,然后回显其值。