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

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

我收到一个奇怪的错误。

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

相关内容