关于bash里一个数值循环的疑问

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
bzcy
帖子: 3
注册时间: 2007-01-20 20:38

关于bash里一个数值循环的疑问

#1

帖子 bzcy » 2011-04-01 12:22

今天在看书的时候,遇到一个数值循环的例子,在Ubuntu里结果总是不正确,在Sco Unix里才正确。

数值循环的例子:

#LOOP=1

#LOOP=`expr $LOOP + 1`

在Ubuntu里,echo $LOOP,结果总为 1+1,在Sco Unix里,结果才为2



查看了下各自当前用户的SHELL版本:echo $SHELL

Ubuntu :/bin/bash

Sco Unix:/bin/sh

参考网上搜索的部分资料:



在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式(等效于bash的 --posix 参数)

一般的,sh是bash的“子集”。



既然这样,那为啥在Ubuntu里不正确,在Sco Unix中是正确的呢?



另:

Ubuntu查看PASSWD文件,看到root用户的shell也是/bin/bash,但root用户返回的结果是正确的,2。

真奇怪。。

有没谁能解释下呢。。
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 关于bash里一个数值循环的疑问

#2

帖子 tusooa » 2011-04-01 17:45

不要expr.

代码: 全选

LOOP=$[LOOP+1]

代码: 全选

] ls -ld //
startfly
帖子: 3
注册时间: 2011-04-03 9:42

Re: 关于bash里一个数值循环的疑问

#3

帖子 startfly » 2011-04-03 9:45

我使用的也是Ubuntu,输入就是2:
wyf@wyf-laptop:~$ LOOP=1
wyf@wyf-laptop:~$ LOOP=`expr $LOOP + 1`
wyf@wyf-laptop:~$ echo $LOOP
2
wyf@wyf-laptop:~$
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 关于bash里一个数值循环的疑问

#4

帖子 chengmoYS » 2011-04-11 13:45

[speed@localhost ~]$ loop=1
[speed@localhost ~]$ loop=`expr $loop + 1`
[speed@localhost ~]$ echo $loop
2
[speed@localhost ~]$

[speed@localhost ~]$ loop=1
[speed@localhost ~]$ loop=$[$loop + 1]
[speed@localhost ~]$ echo $loop
2
[speed@localhost ~]$
hustegg
帖子: 2
注册时间: 2009-05-19 18:28

Re: 关于bash里一个数值循环的疑问

#5

帖子 hustegg » 2011-04-11 14:55

我想你是写表达式的时候有问题,必须类似这样:
b=`expr $a + 1`
不要忽略空格,否则echo $b就显示1+1了
回复