为什么 * 在我的场景中有时不被解释为正则表达式

为什么 * 在我的场景中有时不被解释为正则表达式

我不明白为什么下面的第一个命令有效,当我使用 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

答案1

使用时算术展开

该表达式经历与双引号内相同的扩展

但是当使用 expr(1) 时,您只是将所有内容作为命令行参数传递,因此它们受到所有常规的约束外壳扩展包括文件名扩展(它使用通配符而不是正则表达式,因为我有义务迂腐)。

这被称为expr 手册页

注意许多操作符需要转义或者加引号以用于 shell

相关内容