在bash中使用$ SHELL环境变量前面的空格的奇怪行为

Rad*_*anu 0 linux bash shell

当我使用以下命令时,一切都按预期工作(一个新的gnome-terminal打开,当前的工作目录被更改,终端保持打开状态):

gnome-terminal -e "bash -c 'cd /';$SHELL"
#                                ↑
#                      no space character here
Run Code Online (Sandbox Code Playgroud)

但是当我使用时:

gnome-terminal -e "bash -c 'cd /'; $SHELL"
#                                 ↑
#                           note the space
Run Code Online (Sandbox Code Playgroud)

我可以看到一个打开的终端,但我无法看到当前工作目录是否被更改,因为它立即关闭了终端.

我的问题是:为什么会这样; 如果我在第二种情况下放置空格怎么可能出错?

tha*_*guy 6

在第一种情况下,gnome-terminal执行

bash -c "cd /;/bin/bash"
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,它运行

bash -c "cd /;" /bin/bash
Run Code Online (Sandbox Code Playgroud)

第一种情况意味着"评估cd /;/bin/bash",它将cd并运行一个交互式shell.

第二种情况意味着" cd /;使用$0set进行评估/bin/bash",将运行cd然后退出.