どちらの場合も、アスタリスク(*)ワイルドカードが評価されないのはなぜですか?

どちらの場合も、アスタリスク(*)ワイルドカードが評価されないのはなぜですか?

このコマンドがある場合:

expr 2 * 4

*ワイルドカードが評価されるため、エスケープする必要があるため機能しません。

expr 2 \* 4

ただし、次の2つの状況が発生した場合:

let var1=2*4

var2=$((2*4))

これにより、*ワイルドカードは評価されず、エスケープする必要はありません。

*上記の2つのケースでワイルドカードが評価されないのはなぜですか?私の考えでは、bashandを使用したときにまったく評価されていないようです。let$(())

この場合、ワイルドカードが評価されない他の状況はありますか?

ベストアンサー1

では、var2=2*4空白(メタ文字)のため、2a、一部の文字、および4で始まるファイルはpwdには存在しません。

行は、スペースを区切り文字として使用してトークンに分割されます。

スペースはありません(以降は=引用されていると見なされます)。

$ var1=2*4

しかしそれははい:

$ echo 2 * 4    

タグになって*拡張されます(ファイル名拡張子として)。

特殊効果に引用符を使用したくない場合は、次のようにします*

$ expr 2 \* 4
8
$ expr 2 "*" 4
8
$ expr 2 '*' 4
8

ただし、これは次のように拡張されます。

$ touch 2good4
$ echo 2*4
2good4

では、echo $((2*4))構文内の内容が$((…))算術拡張として解釈されます。どちらも同じことを行います(空白があっても)。

$ echo $((2*4))
8
$ echo $(( 2 * 4 ))
8
$ echo $((    2   *    4    ))
8

おすすめ記事