我是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编程。
答案 0 :(得分:1)
如果您正在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
答案 1 :(得分:0)
您好像有一个解析错误。你需要一个反引号。将行更改为:
x=`echo "$x + 1" | bc`
答案 2 :(得分:0)
不要使用反引号来执行子命令,使用$( cmd )
,这个结构可以嵌套。也许你为了学习的目的用管道做bc算术,否则,shell能够以多种方式做到这一点
$((x+=1))
x=$((x+1))
$((++x))
$((x++))
HTH和亲切的问候
答案 3 :(得分:0)
你没有使用反引号。使用`(又名严重口音,又名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
这样做的好处是既快又快(因为它不调用外部程序)并且更容易阅读(因为它使用更传统的编码语法)。