初始化变量的不同方法

时间:2011-12-18 21:03:16

标签: bash variables syntax

据我所知,有两种方法可以使用进程的输出初始化变量。这两者有什么区别吗?

ex1=`echo 'hello world'`
ex2=$(echo 'hello world')

3 个答案:

答案 0 :(得分:10)

你会得到同样的效果。

建议使用$(),因为它更具可读性,并且可以更轻松地将一个$()嵌套到另一个$()中。

<强>更新

$()语法是POSIX 1003.1标准(2004版)。但是,在某些较旧的UNIX系统(SunOS,HP-UX等)上,/bin/sh无法理解它。

如果您需要使用脚本来处理此类环境,则可能需要使用反引号“`”或使用其他shell(通常是ksh)。

如果您不知道要使用哪种语法,请使用$()。不推荐使用反引号语法。

答案 1 :(得分:4)

请参阅http://mywiki.wooledge.org/BashFAQ/082

还注意到$()是POSIX,所以它确实适用于sh。

答案 2 :(得分:3)

如果您没有自己初始化变量,还有另一种方法可以将变量初始化为默认变量。

[jaypal:~/Temp] a="I have initialized var a"
[jaypal:~/Temp] echo ${a:="Default value"}
I have initialized var a
[jaypal:~/Temp] a=
[jaypal:~/Temp] echo ${a:="Default value"}
Default value