私のシナリオでは、*が時々正規表現として解釈されないのはなぜですか?

私のシナリオでは、*が時々正規表現として解釈されないのはなぜですか?

以下の最初のコマンドが機能する理由を理解できません。 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 のマニュアルページ

シェルで使用するには、多くの演算子をエスケープまたは引用する必要があります。

おすすめ記事