我无法读取 shell 脚本中的 while 循环

我无法读取 shell 脚本中的 while 循环

所以我编写了这个程序来反转参数..但问题是 while 和 expr 命令没有被 shell 脚本读取..这是程序

#!/bin/sh

If test $# -eq 0

 then echo "not enough arguments "

else 
  echo " no. Of arguments is $#"

echo "the arguments are $*"

echo "the reverse of it is"

c=$#

while [ $c -ne 0 ]

do 

  eval echo \$$c

  c='expr $c - 1"

done
fi

我知道它没有读取 while 循环,因为 while 循环的颜色没有改变。

答案1

您可以运行该脚本来bash -x查看它到底在做什么。我注意到它正在比较“expr 2 - 1”以查看它是否等于 0,这看起来是错误的。我认为这一行是错误的:

c='expr $c - 1"

引号不匹配,所以我最初建议使用双引号,但你想要的是分配结果运行 expr blah blah 到c变量,因此需要反引号:

c=`expr $c - 1`

如果您修复了这个问题,并且将大写字母If放在开头附近,那么脚本似乎就可以正确运行。

答案2

我会使用forbash 的算术表达式循环间接变量扩展

$ set -- a b c d e f
$ for (( c=$#; c>0; c--)); do echo ${!c}; done
f
e
d
c
b
a

相关内容