このコマンドがある場合:
expr 2 * 4
*
ワイルドカードが評価されるため、エスケープする必要があるため機能しません。
expr 2 \* 4
ただし、次の2つの状況が発生した場合:
let var1=2*4
var2=$((2*4))
これにより、*
ワイルドカードは評価されず、エスケープする必要はありません。
*
上記の2つのケースでワイルドカードが評価されないのはなぜですか?私の考えでは、bash
andを使用したときにまったく評価されていないようです。let
$(())
この場合、ワイルドカードが評価されない他の状況はありますか?
ベストアンサー1
では、var2=2*4
空白(メタ文字)のため、2
a、一部の文字、および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