为什么命令
echo `echo \z`
导致
z
而不是
z
这是因为`..`
增加了一个额外的逃生级别。 $(..)
不会,并且是执行命令扩展的首选方法。
鉴于
echo `echo \z`
我们可以删除一定程度的转义并使用$(..)
来获得:
echo $(echo z)
和不引号,z
等同于z
,所以我们最终得到:
echo $(echo z)
请注意,外部回声与此无关。反斜杠在扩展数据的一部分时从不特别处理。
我想你实际运行的是:
echo `echo \z`
如果是这样的话,在内部回声中,\
被转义到,然后在外部回声中,
z
产生"z"。就像你跑一样
回显 \z
顺便说一句,请注意使用单个逗号以防止转义
echo '\z'
这导致
\z