你可以考虑一下
for i in "$@"
从中复制所有值
$@
$i
依次给每个人。您可以通过检测代码来观察正在发生的事情:
for i in "$@"
do
echo "\$i = $i; \$@ = ($@)"
case $i in
输出:
$i = -s; $@ = (-s sssss -m 111 -l LOC)
$i = sssss; $@ = (-s sssss -m 111 -l LOC)
$i = -m; $@ = (-s sssss -m 111 -l LOC)
$i = 111; $@ = (-s sssss -m 111 -l LOC)
$i = -l; $@ = (-s sssss -m 111 -l LOC)
$i = LOC; $@ = (-m 111 -l LOC)
Location::: sssss
实际上出了问题的是你没有离开
$1
当你得到一个未知的
for i in "$@"
do
echo "\$i = $i; \$@ = ($@)"
case $i in
-l=*|--ddloc=*)
DDLOC="${i#*=}"
shift
;;
-l|--ddloc)
shift
DDLOC="$1"
shift
;;
*)
shift
;;
esac
done
然后您将得到您期望的结果:
$i = -s; $@ = (-s sssss -m 111 -l LOC)
$i = sssss; $@ = (sssss -m 111 -l LOC)
$i = -m; $@ = (-m 111 -l LOC)
$i = 111; $@ = (111 -l LOC)
$i = -l; $@ = (-l LOC)
$i = LOC; $@ = ()
Location::: LOC
尽管这种行为仍然不太正确-
LOC
对于循环,可以执行以下操作:
while [ -n "$1" ]
do
case $1 in