概述:
对于命令替换来说, $(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
--------------------------------------------------
author: cs_cjl
website: http://blog.csdn.net/cs_cjl
--------------------------------------------------