
奇妙なエラーが発生しました。
#!/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ループを認識します。