shell中的-lt和<有什么区别?

时间:2019-06-21 05:28:46

标签: shell sh

我正在研究shell脚本,不了解-eq==-lt<-gt和{{1 }},依此类推。

我正在尝试编写从0到9的while循环打印

>

此代码有效,但是当我将num=0 while [ $num -lt 10 ]; do echo "$num" ((num++)) done 更改为-lt时,它说没有这样的文件或目录。

<

这里num=0 while [ $num < 10 ]; do echo "$num" ((num++)) done 有什么问题?我是否总是需要在while循环中使用<?有没有一般的方法来做while循环?感谢您能提供帮助。

4 个答案:

答案 0 :(得分:4)

Shell脚本在语法方面一直不同。

因此,当您说-lt时,它的含义小于(<)。因此,当您编写代码时,它可以很好地工作

while [ $num -lt 10 ]; do
   echo "$num"
   ((num++))
done

但是在外壳程序脚本中使用<时,它用于从文件或目录读取输入。因此,根据您的情况,它将在$num变量

中搜索文件的名称。

简单地说

  1. -lt小于用于条件检查的

  2. <用于读取文件中的输入。

答案 1 :(得分:2)

在命令行中 << / strong>表示从文件读取输入

例如 grep“我的名字”

此外,  > 将输出重定向到文件

例如 ls> lists.txt

在执行 $ num <10 时 它会检查名为10的文件

答案 2 :(得分:0)

命令[指定-lt用于比较两个整数。期望<做任何有用的事情只是一厢情愿。

巧合的是,字符<是用于input redirection的bash元字符。您收到的错误是由于cwd中不存在文件10

答案 3 :(得分:0)

您可以在双括号(整数)或大括号(字符串)中使用“ <”

num=0
while (( $num < 10 )); do
    echo "$num"
    ((num++))
done

以及字符串

str="a"
while [[ $str < "aaaaa" ]]; do
    echo "$str"
    str+="a"
done