Mar*_*rin 10 linux bash shell fedora
我试图在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
Run Code Online (Sandbox Code Playgroud)
COUNTER作业周围的引号是反引号.
我试图取代COUNTER以$COUNTER这样的:
$COUNTER = `expr $COUNTER + 1`
Run Code Online (Sandbox Code Playgroud)
但这并没有解决问题,并给了我以下错误:
line7: 0: command not found.
Run Code Online (Sandbox Code Playgroud)
Sha*_*hin 32
正如@Cory正确指出的那样,等号周围不应该有空格,否则bash会混淆COUNTER命令.
COUNTER=$(expr $COUNTER + 1)
Run Code Online (Sandbox Code Playgroud)
也就是说,您可以通过使用以下替代方法避免将bash fork作为子进程:
let COUNTER="COUNTER + 1"
Run Code Online (Sandbox Code Playgroud)或者,使用bash c风格的表达式:
(( COUNTER++ ))
Run Code Online (Sandbox Code Playgroud)实际上,你的while循环可以写成:
for ((COUNTER=0; COUNTER <= 5 ; COUNTER++))
do
echo "i will add this line to file mycreation">>./myfile
done
Run Code Online (Sandbox Code Playgroud)
当您遇到错误时:
line 7: 0: command not found.
'-----' '--' '------------------'
| | |
location | Description of error.
culprit
Run Code Online (Sandbox Code Playgroud)
我的猜测就是你在7号线上所拥有的
$COUNTER = `expr $COUNTER + 1`
-------- --------------------
| |
Evaluated to 0 |
Evaluated to 1
Run Code Online (Sandbox Code Playgroud)
什么bash最终看到是0 = 1因为bash语句通常是在表单中command arg1 arg1 ...,bash将其解释为运行0带参数的命令= 1.因此错误信息:0: command not found.
当你删除等号周围的空格时,bash最终解释的是:
0=1
Run Code Online (Sandbox Code Playgroud)
这意味着运行命令0=1没有参数,因此错误0=1: command not found.
变量赋值应该是VAR_NAME=VALUE(没有$)的形式,所以你应该使用的语法是:
COUNTER=`expr $COUNTER + 1` # or any of the variants above
Run Code Online (Sandbox Code Playgroud)
哪个bash评估并最终解释为:
COUNTER=2
Run Code Online (Sandbox Code Playgroud)