得之我幸 失之我命

when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.

shell 中命令替换的写法

写脚本的时候,另外一条命令的返回值作为一个变量在接下来的命令中被使用,是一个比较常见的作法,那么问题来了,怎么得到这个命令的返回值呢?

这时,就要用到一个 command substitution 的东西了

在 shell 脚本中,常见的写法有两种:$() 和 ``(一对反引号)

例:

1
2
3
4
5
$ echo $(uname -r)
3.1.6-340.x86_64

$ echo`uname -r`
3.1.6-340.x86_64

看起来似乎是 $() 的写法更加易读,因为反引号更容易看成单引号,但是 $() 的支持却略弱于反引号,所以从脚本移植的角度而言,反引号更好

此外,两者皆可以嵌套,但需注意,嵌套使用时内层的反引号必须用反斜杠(\)将其转义,但是当你多层嵌套的时候, $() 可读性的优势就体现的很明显了

1
2
3
4
5
$ echo $(basename $(dirname $(dirname /var/adm/sw/save )))
adm

$ echo `basename \`dirname \\\`dirname /var/adm/sw/save \\\`\``
adm

be yourself, everyone else is already taken.