期望整数表达式

2024-03-21

我想每 5 秒逐行读取我的文件。这次我只是尝试使用一行 bash 命令来执行此操作。 bash 命令是:

let X=1;while [ $X -lt 20 ];do cat XXX.file |head -$X|tail -1;X=$X+1;sleep 5;done

但是我收到了如下错误:

-bash: [: 1+1: integer expression expected

有什么问题? 顺便说一句,为什么我们不能让 $X

thx


你的任务X=$X+1不执行算术运算。如果$X为 1,则将其设置为字符串"1+1"。改变X=$X+1 to let X=X+1 or let X++.

至于使用-lt而不是<,这只是语法的一部分[(即test命令)。它用= and != for string平等与不平等-eq, -ne, -lt, -le, -gt, and -ge对于数字。正如@Malvolio 指出的,使用<会很不方便,因为它是输入重定向运算符。

(The test / [bash shell 中内置的命令确实接受< and >, 但不是<= or >=, 对于字符串。但是< or >字符必须加引号以避免解释为 I/O 重定向运算符。)

或者考虑使用等效的(( expr ))构造而不是let命令。例如,let X++可以写成((X++))。至少 bash、ksh 和 zsh 支持这一点,尽管 sh 可能不支持。我还没有检查相应的文档,但我认为 shell 的开发人员希望使它们兼容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

期望整数表达式 的相关文章

随机推荐