我试图在bash脚本中增加一个变量,但它无效。这是我的代码:
#! /bin/bash
COUNTER=0
while [ $COUNTER -lt 5 ]
do
echo "i will add this line to file mycreation">>./myfile
COUNTER = `expr $COUNTER + 1`
done
COUNTER
作业周围的引号是反引号。
我尝试将COUNTER
替换为$COUNTER
,如下所示:
$COUNTER = `expr $COUNTER + 1`
但这并没有解决问题并给了我以下错误:
line7: 0: command not found.
答案 0 :(得分:32)
正如@Cory正确指出的那样,等号周围不应有空格,否则bash会混淆COUNTER
命令。
COUNTER=$(expr $COUNTER + 1)
也就是说,您可以通过使用以下替代方法避免将bash fork作为子进程:
let COUNTER="COUNTER + 1"
或者,使用bash c风格的表达式:
(( COUNTER++ ))
实际上,你的while循环可以写成:
for ((COUNTER=0; COUNTER <= 5 ; COUNTER++))
do
echo "i will add this line to file mycreation">>./myfile
done
当您遇到错误时:
line 7: 0: command not found.
'-----' '--' '------------------'
| | |
location | Description of error.
culprit
我的猜测就是你在第7行所拥有的
$COUNTER = `expr $COUNTER + 1`
-------- --------------------
| |
Evaluated to 0 |
Evaluated to 1
bash最终看到的是0 = 1
,并且由于bash语句通常采用command arg1 arg1 ...
形式,因此bash会将其解释为运行带有参数0
的命令= 1
。因此错误消息:0: command not found
。
当您删除等号周围的空格时,bash最终解释的是:
0=1
表示运行没有参数的命令0=1
,因此错误为0=1: command not found
。
变量分配应采用VAR_NAME=VALUE
形式(不含$
),因此您应使用的语法为:
COUNTER=`expr $COUNTER + 1` # or any of the variants above
哪个bash评估并最终解释为:
COUNTER=2
答案 1 :(得分:6)
删除等号周围的空格:
COUNTER=`expr $COUNTER + 1`
答案 2 :(得分:3)
另一种方式。
COUNTER=$(($COUNTER + 1))
答案 3 :(得分:2)
for i in {0..4}; do
echo "i will add this line to file mycreation" >> ./myfile
done