我收到一个奇怪的错误。
#!/bin/bash
echo "Please enter a number"
read var
declare -i num
num=0
while ($num<$var)
do
echo "$num"
done
Run Code Online (Sandbox Code Playgroud)
./loop: line 5: 6: 没有那个文件或目录
我误会了什么?
Kus*_*nda 16
(...)
启动一个子shell并在其中运行指定的命令。这就是($num<$var)
生成该错误消息的原因;找不到对应的文件$var
,传入对应的命令$num
。
你可能想要类似的东西
while (( num < var )); do
echo "$num"
done
Run Code Online (Sandbox Code Playgroud)
((...))
是算术展开式。它将计算内部表达式的值。在这种情况下,它将比较两个变量的值($
这里不需要它们前面的)。如果比较结果为真,则 while 循环将再运行一次迭代。
while 循环也是一个无限循环,因为您既不增加num
也不减少var
。
最后,您可能想尝试
for (( num = 0; num < var; ++num )); do
echo "$num"
done
Run Code Online (Sandbox Code Playgroud)
或者
for (( num = 0; num < var; ++num )); do
printf '%d\n' "$num"
done
Run Code Online (Sandbox Code Playgroud)
如果您了解 C 或具有类似 C 语法的语言,那么您就会认出这种类型的 for 循环。