我正在学习脚本,并创建了edit.sh来制作一个简单的while循环,如下所示
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
a='expr $a + 1'
done
我上网查过这个问题,大部分时间都是间距问题......但我已经检查并重新写了10次代码,但我总是得到的是
.edit.sh:第5行。[: 太多参数。
我不知道我的生活中我做错了什么,它可能真的很愚蠢,我只是看不到它,任何帮助aprecciated。
根据你的代码,你是在给字面字符串赋值 expr $a + 1
名下 a
的结果,而不是命令--------的结果。expr 0 + 1
. 随着 $a
未加引号,然后您可以尝试执行以下命令 [ expr $a + 1 -lt 10 ]
这确实有太多的争论。
眼前的问题是,你把反引号误认为是单引号,你本来想写的是......。
a=`expr $a + 1`
但是,几乎不应该使用反引号,而应该使用 $(...)
构造,用于命令替换。
a=$(expr $a + 1)
然而,不需要使用 expr
命令,用于在POSIX兼容的shell中进行算术运算。使用 $((...))
而不是。
a=$((a + 1))