コマンドを使用しましたが、次の$(())
エラーが表示されました。
bash: 0: command not found
このエラーはなぜ発生しますか?
答え1
これは$(( ))
算術置換または算術拡張です。ここでは(整数)算術演算を実行でき、シェルはそれを実行し、式全体をこれらの演算の結果に置き換えます。
このように使用する場合をよく見ることができます
count=$(( count + 1 ))
ここでシェルは何もしないので(算術置換はヌルです)、シェルbash
は結果をゼロにします。
これをコマンドとして使用しています。つまり、シェルが0
結果をコマンドとして実行しようとすることを意味します。
失敗して理由を伝えます(「0:コマンドが見つかりません」)。
これは空の算術置換であり、他のシェルで異なる方法で処理される極端なケースのようです。 and(OpenBSDで)をbash
持つシェルは実行を試み、whileと文句を言います:zsh
pdksh
ksh
0
dash
yash
$ dash -c '$(( ))'
dash: 1: arithmetic expression: expecting primary: " "
$ yash -c '$(( ))'
yash: arithmetic: a value is missing
これPOSIX規格説明する
拡張として、シェルは、リストされた以上の算術式を認識します。
...これはbash
、zsh
およびpdksh
.(つまり、空の式を「0」として認識する)の関数です。