Answers:
$(...)
是命令替换(不仅是子shell),而且$((...))
是算术扩展。
当您使用时$((...))
,...
会将解释为算术表达式。这意味着,除其他外,十六进制字符串将被解释为数字并转换为十进制。然后将整个表达式替换为该表达式求值的数值。
像参数扩展和命令替换一样,$((...))
应引述为不受Shell的单词拆分和文件名限制的影响。
echo "$(( 0x63 ))"
附带说明,在算术表达式中出现的变量不需要它们$
:
$ x=030; y=30; z=0x30
$ echo "$(( x + y +x ))"
78
$(( ))
制作受分词或通配符影响的输出?
$((...))
与命令替换冲突,因此必须记住写echo "$( (echo x; echo y) | tr xy yx)"
而不是echo "$((echo x; echo y) | tr xy yx)"
(尽管某些shell仍会接受后者,YMMV)。