我想每 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(使用前将#替换为@)