我收到一个奇怪的错误。
#!/bin/bash
echo "Please enter a number"
read var
declare -i num
num=0
while ($num<$var)
do
echo "$num"
done
./loop: line 5: 6: 没有这样的文件或目录
我错了什么?
答案1
(...)
启动一个子 shell 并在其中运行指定的命令。这就是($num<$var)
生成该错误消息的原因;它找不到 对应的文件来$var
传递给 对应的命令$num
。
你可能想要类似的东西
while (( num < var )); do
echo "$num"
done
((...))
是算术展开式。它将计算内部表达式的值。在这种情况下,它将比较两个变量的值($
这里不需要它们前面的)。如果比较为真,则 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 循环。