为什么在跑2时我得到额外的空行。对我来说1就像2.那么为什么2)中的额外线?
1)
export p1=$(cd $(dirname $0) && pwd)
# ^
echo p1
2)
export p2=$(cd $(dirname $0)) && pwd
# ^
echo p2
答案 0 :(得分:0)
p1捕获cd
(空)和pwd
的输出。
p2仅捕获cd
的输出,然后在没有重定向的情况下运行pwd
。
echo p1
打印文字p1
(带换行符)。我猜你实际上并没有从你的终端进行复制粘贴,而是输入其他东西。
peter@tesla:~$ export p2=$(true) && pwd
/home/peter
peter@tesla:~$ echo "x${p2}x"
xx
子shell中的 cd
不会影响父shell的pwd,所以我只是用true
命令替换它以使其更具可读性。
答案 1 :(得分:0)
$echo $0
/bin/bash
$ echo $(cd $(dirname $0) && pwd)
/bin
$ echo $(cd $(dirname $0)) && pwd
/home/user
$
在第一个表达式中,它变为echo $(cd /bin && pwd)
。因此,内部2个命令在子shell中执行,并返回pwd
值,然后回显。
在第二个表达式中,它减少到echo $(cd /bin) && pwd
。因此,只有cd命令在子shell中执行并且不返回echo(因此默认情况下echo只打印一个空行)。由于echo成功运行(退出代码= 0)&&
结果为true,pwd
cmd在当前shell中运行并且pwd
被打印