我想每隔5秒逐行读取我的文件.这次我只尝试了单行bash命令来执行此操作.而bash命令是:
let X=1;while [ $X -lt 20 ];do cat XXX.file |head -$X|tail -1;X=$X+1;sleep 5;done
Run Code Online (Sandbox Code Playgroud)
但是我收到的错误如下:
-bash: [: 1+1: integer expression expected
Run Code Online (Sandbox Code Playgroud)
有什么问题?顺便说一句,为什么我们不能做X <20?(相反,我们必须做 - 小于?)
谢谢
Kei*_*son 21
你的作业X=$X+1不执行算术.如果$X为1,则将其设置为字符串"1+1".更改X=$X+1到let X=X+1或let X++.
至于使用-lt而不是<,那只是语法的一部分[(即test命令).它使用=与!=用于字符串等式和不等式-eq,-ne,-lt,-le,-gt,和-ge为数字.正如@Malvolio指出的那样,使用<会很不方便,因为它是输入重定向操作符.
(中test/ [是内置于bash shell的命令不接受<和>,但不<=还是>=为字符串,但<还是>角色有被引用,以避免解释为I/O重定向操作.)
或者考虑使用等效(( expr ))结构而不是let命令.例如,let X++可以写成((X++)).至少bash,ksh和zsh支持这一点,尽管sh可能不支持.我没有检查相应的文档,但我认为shell的开发人员希望使它们兼容.