「$(())」コマンドの出力がゼロであるのはなぜですか?

「$(())」コマンドの出力がゼロであるのはなぜですか?

コマンドを使用しましたが、次の$(())エラーが表示されました。

bash: 0: command not found

このエラーはなぜ発生しますか?

答え1

これは$(( ))算術置換または算術拡張です。ここでは(整数)算術演算を実行でき、シェルはそれを実行し、式全体をこれらの演算の結果に置き換えます。

このように使用する場合をよく見ることができます

count=$(( count + 1 ))

ここでシェルは何もしないので(算術置換はヌルです)、シェルbashは結果をゼロにします。

これをコマンドとして使用しています。つまり、シェルが0結果をコマンドとして実行しようとすることを意味します。

失敗して理由を伝えます(「0:コマンドが見つかりません」)。


これは空の算術置換であり、他のシェルで異なる方法で処理される極端なケースのようです。 and(OpenBSDで)をbash持つシェルは実行を試み、whileと文句を言います:zshpdkshksh0dashyash

$ dash -c '$(( ))'
dash: 1: arithmetic expression: expecting primary: " "
$ yash -c '$(( ))'
yash: arithmetic: a value is missing

これPOSIX規格説明する

拡張として、シェルは、リストされた以上の算術式を認識します。

...これはbashzshおよびpdksh.(つまり、空の式を「0」として認識する)の関数です。

関連情報