Linux何时使用括号

时间:2016-03-03 05:59:24

标签: linux bash

为什么在跑2时我得到额外的空行。对我来说1就像2.那么为什么2)中的额外线?

1)

export p1=$(cd $(dirname $0) && pwd)
#                                  ^
echo p1

2)

export p2=$(cd $(dirname $0)) && pwd
#                           ^
echo p2 

2 个答案:

答案 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被打印