回答这个问题,我发现行为之间一个非常有趣的(和微妙的)差别bash
和zsh
:
在bash
:
romano@RRyS:~$ pwd
/home/romano
romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null &"
romano@RRyS:~$ x
[1] 16611
romano@RRyS:~$ pwd
/home/romano
如您所见,别名的执行x
是在子外壳中进行的,因此当前目录不会更改。
不在zsh
:
[romano:~] % pwd
/home/romano
[romano:~] % alias x="cd /bin && ./echo A >/dev/null &"
[romano:~] % x
[1] 16744
[1] + 16744 done ./echo A >/dev/null
1& [romano:/bin] % pwd
/bin
[romano:/bin] %
此处目录已更改。
似乎&
in bash
的优先级不同于zsh
---我的意思是,该命令似乎被读为
(cd /tmp && echo A) &
在bash
和作为
cd /tmp && (echo A &)
在zsh
。这是正确的还是导致另一种行为的原因?