Bashで数値を比較すると、「該当するファイルやディレクトリはありません」

Bashで数値を比較すると、「該当するファイルやディレクトリはありません」

奇妙なエラーが発生しました。

#!/bin/bash
echo "Please enter a number"
read var
declare -i num
num=0
        while ($num<$var)
        do
                echo "$num"
        done

./loop: 行 5: 6: 対応するファイルやディレクトリはありません。

私は何が間違っていましたか?

ベストアンサー1

(...)サブシェルを起動し、その中で指定されたコマンドを実行します。これが($num<$var)エラーメッセージが生成される理由です。$varそのコマンドに渡すファイルが見つかりません$num

あなたは次のようなものが欲しいかもしれません

while (( num < var )); do
  echo "$num"
done

((...))算術拡張です。内部表現を評価します。この場合、2つの変数の値を比較します($前の変数はここでは必要ありません)。比較が真の場合、whileループはもう一度反復を実行します。

whileループは増加numも減少もしないので無限ループでもありますvar

最後に試してみることもできます。

for (( num = 0; num < var; ++num )); do
  echo "$num"
done

または

for (( num = 0; num < var; ++num )); do
  printf '%d\n' "$num"
done

CやCに似た構文を使用する言語がわかっている場合は、このタイプのforループを認識します。

おすすめ記事