所以我编写了这个程序来反转参数..但问题是 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
我会使用for
bash 的算术表达式循环间接变量扩展:
$ set -- a b c d e f
$ for (( c=$#; c>0; c--)); do echo ${!c}; done
f
e
d
c
b
a