shell中命令替换$(cmd)和符号`cmd`有什么区别吗?

2025-01-07 06:48:44
推荐回答(2个)
回答1:

1, 反引号很容易与单引号搞混乱,对初学者来说。有时在一些奇怪的字形显示中,两种符号是一模一样的(直竖两点)。用$()可以更好的避免这种混乱

2, 在多层次的复合替换中,反引号须要额外的跳脱( /` )处理,而 $( ) 则比较直观。例如:
`com1`com2`` 你这么写就是错的。需要`com1/`com2/``如果有多个命令嵌套就比较复杂了。而用$()就比较直观比如$(com1$(com2$(com3)))

不过,$( ) 并不是没有毙端的...
反引号 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。
而 $() 并不见的每一种 shell 都能使用.

回答2:

`cmd`是执行里面的shell命令
但是$()有多种用法,$(cmd)只是其中一种用法,效果其实是和`cmd`是一样的。
参考下$()的用法:
${#1} : 第一个参数的长度
${1} : 第一个参数
$(env | grep HOSTNAME) :去圆括号内命令的返回值
${HOSTNAME} : 返回花括号内环境变量的值