我不明白为什么下面的第一个命令有效,当我使用 expr 命令时它需要 * 被转义。在我看来,* 应该总是被转义,因为它是 BRE 的一部分,因此应该被转义而不代表“任何”。所以我不明白为什么第一个命令实际上有效。
$ a=2; b=3; echo $((a*b))
6
$ var1=$(expr 2 * 3) ; echo $var1
expr: syntax error: unexpected argument ‘Desktop’
$ var1=$(expr 2 \* 3) ; echo $var1
6
使用算术展开时
但是当使用 expr(1) 时,你只是将所有内容作为命令行参数传递,因此它们受制于所有常规的shell 扩展,包括文件名扩展(它使用 globbing 而不是正则表达式,因为我有义务迂腐)。
这在expr 手册页中被调用