我正在尝试编写在参数列表上运行的代码,
例如,如果我有-p a b c d -q g e f c
作为参数:
当我得到-p
时,我希望循环在变量a b c d
上运行,直到得到-q
,然后再执行其他操作,
同样,我希望它是相反的;
这是我的代码:
#bin/bash
while test -n "$1" -a ${1:0:1} = - ;do
if test x$1=x-q:then
shift
while test -n "$1" ; do
echo $1
if test x$2=x-p;then
break;
shift
done
fi
if test x$1=x-p;then
echo 'print test'+$1;
shift
fi
done
但是break似乎不起作用,有人知道我可以如何实现吗?
答案 0 :(得分:1)
首先考虑解析所有参数,然后在一个数组中收集“ -p” args,在另一个数组中收集“ -q” args:
p_args=()
q_args=()
opt=""
for arg do
case $arg in
"-p") opt=p ;;
"-q") opt=q ;;
*) [[ $opt == p ]] && p_args+=("$arg")
[[ $opt == q ]] && q_args+=("$arg")
;;
esac
done
# do stuff with "-p" args
declare -p p_args
# do stuff with "-p" args
declare -p q_args