Unix中的变量赋值

时间:2016-07-04 15:03:36

标签: shell unix variable-assignment

当我尝试以下语句时,它没有正确地为变量赋值,循环变为无限 -

while ( [ $nos -ne 0 ] )
do
    rem = `expr $nos % 10`
    sum = `expr $sum + $rem`
    nos = `expr $nos / 10`
done

但是当我从赋值运算符的左侧和右侧删除空格时,它可以正常工作。像这样 -

while ( [ $nos -ne 0 ] )
do
    rem=`expr $nos % 10`
    sum=`expr $sum + $rem`
    nos=`expr $nos / 10`
done

为什么Shell的行为是这样的?

2 个答案:

答案 0 :(得分:0)

rem = `expr $nos % 10`

使用第一个参数rem运行命令=

如果不是POSIX sh标准要求赋值解析为单个单词(它确实如此),则无法将=作为第一个参数传递给命令或函数;因此,标准按原样写成。

还有基于作业空白的表现力。例如:

rem= foo

...运行foo,环境变量rem仅在该单个命令的执行期间设置为空字符串,就像

一样
var=val foo
运行var时,

val设置为foo。这是有用的语法;如果var=val foo等同于var="val foo",那就不可能。

答案 1 :(得分:-3)

在Shell脚本中,您可以创建功能。要调用函数,只需编写

即可

功能arg1 arg2 ...

这就是为什么,在我看来,它是这样的。

另外,如果你使用bash,你可以做$((nos%10))而不是调用内置的expr