Chinaunix

标题: 关于bash里数值循环的一个疑问 [打印本页]

作者: bzcy    时间: 2011-04-01 12:32
标题: 关于bash里数值循环的一个疑问
今天在看书的时候,遇到一个数值循环的例子,在Ubuntu里结果总是不正确,在Sco Unix里才正确。

数值循环的例子:

#LOOP=1

#LOOP=`expr $LOOP + 1`

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



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

Ubuntu :/bin/bash  (非root用户)

Sco Unix:/bin/sh

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



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

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



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



另:

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



真奇怪。。有没人能解释下。。
作者: 昭襄王    时间: 2011-04-01 12:41
$ LOOP=1
$ LOOP=`expr $LOOP + 1`
$ echo $LOOP
2
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.10
Release:        10.10
Codename:       maverick
作者: chenbin200818    时间: 2011-04-01 13:08
ubutnu 10.04  通过 答案为2
作者: liion631818    时间: 2011-04-01 13:29
回复 1# bzcy

bash版本

  1.      echo $BASH_VERSION
  2.      # 2.05b.0(1)-release
复制代码

  1. LOOP=1
  2. echo `expr $LOOP + 1`
  3. # 2

复制代码
expr 之后的运算数要用空白隔开的,这样会打印2,如果没有,就是1+1了,LZ看看是不是这个问题
如果不是,期待高手解答
作者: bzcy    时间: 2011-04-01 13:38
回复  bzcy

bash版本expr 之后的运算数要用空白隔开的,这样会打印2,如果没有,就是1+1了,LZ看看是不 ...
liion631818 发表于 2011-04-01 13:29





确实是这样。。杯具中。。

初学者杯具中。。。

谢谢指点。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2