Friday, March 6, 2009

Bash中的command substitution

更多精彩请到 http://www.139ya.com

转自: http://blog.chinaunix.net/u2/72383/showart_1088939.html
Bash中的command substitution
bash中的命令替换有两种方法:
(1) $(command)
(2) `command`

在``里,可以使用backslash字符,且只有它后面紧跟'$' '`' '\'时,baskslash才有转义效果。
manuan里面说$里的内容全都是应该当作command的内容,不允许有特殊功能字符出现,我就纳闷了,
echo $(cat $(echo "1.h")) 就是合法的命令,如果$的括号内不不允许特殊功能字符,那$是吃屎的阿。所以manual里面的有些话不敢信。这就是nested 命令

echo `cat \`echo "1.h"\`` 也可以达到同样的效果,结果就是将文件1.h的内容打印出来了。

在脚本中进行命令替换要注意一点,如下脚本中:
test.sh内容:
`echo "haha"`
表面挂上看是合法的,但是非法的,因为他与
echo "haha"
是不一样的,前者将命令执行时向stdout的输出作为命令结果并直接在校本中将命令替换成haha。然后脚本解释器就会报错,无法识别haha。而后者不一样,它直接执行,并将结果直接写到标准输出了。这就是在校本中调用echo和通过命令替换调用echo的区别,当然$(echo "haha")也会出同样的错误。

因此命令替换不能孤单的放在那里,必须加上别的命令去处理它。

No comments: