据我所知,有两种方法可以使用进程的输出初始化变量。这两者有什么区别吗?
ex1=`echo 'hello world'`
ex2=$(echo 'hello world')
答案 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