比较bash中的数字时“没有这样的文件或目录”

pet*_*ter 5 bash

我收到一个奇怪的错误。

#!/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 循环。