当我尝试以下语句时,它没有正确地为变量赋值,循环变为无限 -
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的行为是这样的?
答案 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