您的位置:首页 > 运维架构 > Shell

关于Shell中命令替换$(...)与后置引用`...`的不同

2012-12-28 22:26 337 查看
概述:

对于命令替换来说, $(COMMAND)形式已经取代了后置引用`COMMAND`

(1) Bash中的后置引用 `COMMAND`会将命令中的\\转义为\再执行,而$(COMMAND)则不会进行转义
(2) $(...)形式的命令替换是允许嵌套的

详述:
echo `echo '\\'`
输出:
\

echo $(echo '\\')
输出
\\

假设:
VS100COMNTOOLS=C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\
在终端输入:
echo `echo "${VS100COMNTOOLS}" | sed 's#^\(.\+\)\\.\+#\1#'`
输出
C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\

echo $(echo "${VS100COMNTOOLS}" | sed 's#^\(.\+\)\\.\+#\1#')
输出
C:\Program Files\Microsoft Visual Studio 10.0\Common7

$(...)形式的命令替换达到了预期目的,而`...`却没有达到
原因是`...`将sed '...\\...'中的\\转义成了sed '...\....'

改成
echo `echo "${VS100COMNTOOLS}" | sed 's#^\(.\+\)\\\\.\+#\1#'`
或者使用$(...)即可

参考资料:高级Bash脚本编程指南-命令替换

--------------------------------------------------

author: cs_cjl

website: http://blog.csdn.net/cs_cjl

--------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: