我是 UNIX 的初学者。我在编写while
循环时遇到了一个愚蠢的错误。
代码:-
$ x=0
$ while [ $x -lt 10 ]
> do
> echo $x
> x=´echo "$x + 1" | bc´
> done;
我收到错误:-
0
bc´: command not found
0
bc´: command not found
0
bc´: command not found
...
有谁能够帮我?我对shell编程一无所知。
我是 UNIX 的初学者。我在编写while
循环时遇到了一个愚蠢的错误。
代码:-
$ x=0
$ while [ $x -lt 10 ]
> do
> echo $x
> x=´echo "$x + 1" | bc´
> done;
我收到错误:-
0
bc´: command not found
0
bc´: command not found
0
bc´: command not found
...
有谁能够帮我?我对shell编程一无所知。
如果您x=´echo "$x + 1" | bc´
要增加x
(danf 指出的错误),请使用以下内容
x=`expr $x + 1`
还要注意空格...bash
非常挑剔
这是输出 -
xxxx@cse:~> x=5
xxxxx@cse:~> while [ $x -lt 10 ]; do echo $x; x=`expr $x + 1`; done;
5
6
7
8
9
您可以使用bc
它来使其工作,但最好使用expr
xxxx@cse:~> x=5
xxxx@cse:~> while [ $x -lt 10 ]; do echo $x; x=`echo "$x + 1"|bc`; done;
5
6
7
8
9
不要使用反引号来执行子命令,使用$( cmd )
,这个构造可以嵌套。也许您出于学习目的使用管道到 bc 进行算术运算,否则,shell 能够以多种方式执行此操作
$((x+=1))
x=$((x+1))
$((++x))
$((x++))
HTH 和亲切的问候
你似乎有一个解析错误。你需要一个反引号。将行更改为:
x=`echo "$x + 1" | bc`
你没有使用反引号。使用 `(又名重音,又名 U+0060)(位于美式键盘的左上角)而不是 ´(又名重音,又名 U+00B4)。
例如,以下工作正常:
x=0
while [ $x -lt 10 ]; do
echo $x
x=`echo "$x + 1" | bc`
done
你和我的唯一区别是引用的刻度echo "$x + 1" | bc
。
话虽如此,如果您碰巧使用 bash(或类似 bash 的 shell),则有更好的方法来制作相同的循环。例如:
x=0
while (( x++ < 10 )); do
echo $x
done
这具有更快(因为它不调用外部程序)和更易于阅读(因为它使用更传统的编码语法)的优点。