Chinaunix

标题: 怎么这样赋值???? [打印本页]

作者: ibm99    时间: 2003-06-11 15:47
标题: 怎么这样赋值????
x=$(($x+1));    这句不是$2的值吗??
和x=`echo "$x + 1 " | bc`
有什么区别???
作者: nkliyong    时间: 2003-06-11 15:50
标题: 怎么这样赋值????
如果$x=1,那么
x=$(($x+1))后,x=$2;

x=`echo "$x + 1 " | bc` 后x=2
作者: woodie    时间: 2003-06-11 16:37
标题: 怎么这样赋值????
ibm99你是用bash的吗?

$((expression))是bash的“算术扩展”操作符,expression作为一个算术表达式被计算,然后替换结果。其中expression如同用双引号括起一样,允许对它进行参数替换。
  1. TWO=$((1+1))   #TWO=2
  2. TREE=$(($TWO+1))  #TREE=3
复制代码


$(())的语法大概是bash的扩展吧,其它的shell不一定支持。

如果做整数计算还可以用expr命令;

如果是浮点数,或者精度要求非常高,那么bc是个好帮手。

bash的功能很强,但是使用了它的扩展语法,脚本的移植性就会有问题了。   
expr和bc是标准的unix工具,用起来不必有兼容性的顾虑。其它如awk/perl等脚本语言也可以做算术计算。
如何取舍选择,有您自己决定。
作者: 红袖添香    时间: 2003-06-11 16:55
标题: 怎么这样赋值????
[quote]原帖由 "woodie"]$(())的语法大概是bash的扩展吧,其它的shell不一定支持。[/quote 发表:
   

$((..)) 始于 ksh,一般 UNIX 下都有 ksh.

但是确实,如果你的脚本移植性好一点的话,建议还是用通用的 expr, bc等来做算术运算。
作者: ibm99    时间: 2003-06-11 16:56
标题: 怎么这样赋值????
谢谢了,我的系统是ksh的,但是
x=$(($x+1)) 和 x=`echo "$x + 1 " | bc`
结果一样。
作者: 红袖添香    时间: 2003-06-11 17:22
标题: 怎么这样赋值????
原帖由 "ibm99" 发表:
谢谢了,我的系统是ksh的,但是
x=$(($x+1)) 和 x=`echo "$x + 1 " | bc`
结果一样。
   

为什么你觉得它们应该不一样?  
作者: woodie    时间: 2003-06-11 17:53
标题: 怎么这样赋值????
原帖由 "红袖添香" 发表:
   

$((..)) 始于 ksh,一般 UNIX 下都有 ksh.

但是确实,如果你的脚本移植性好一点的话,建议还是用通用的 expr, bc等来做算术运算。
   

多谢红袖指教,又长了点知识,hoho。我平常用的是bash。
作者: 红袖添香    时间: 2003-06-11 18:08
标题: 怎么这样赋值????
原帖由 "woodie" 发表:
   

多谢红袖指教,又长了点知识,hoho。我平常用的是bash。
   

其实我喜欢用 bash 作为 login shell,敲命令方便啊,
但是很少用它写脚本。
作者: anonimousboy    时间: 2003-06-12 08:02
标题: 怎么这样赋值????
原帖由 "红袖添香" 发表:
   

其实我喜欢用 bash 作为 login shell,敲命令方便啊,
但是很少用它写脚本。
   

哈哈,原来红袖J也喜欢用BASH做LOGIN SHELL啊,我也喜欢,那样可以用TAB,方便的很,而且我现在学的也是BASH,想问的是红袖为什么不喜欢用BASH写脚本呢?
作者: 红袖添香    时间: 2003-06-12 19:32
标题: 怎么这样赋值????
原帖由 "anonimousboy" 发表:
   

哈哈,原来红袖J也喜欢用BASH做LOGIN SHELL啊,我也喜欢,那样可以用TAB,方便的很,而且我现在学的也是BASH,想问的是红袖为什么不喜欢用BASH写脚本呢?
   

为了可移植性啊,bash 不是默认的 shell, OpenBSD 下系统进入安全模式时,很有可能就无法运行 bash。因此一般我都是用 bourne shell 写的,基本上 bourne shell 就能满足要求。




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