我想访问多个命令行输入的标志,但无法正常工作。输入顺序超出了我的控制范围,格式为(#是数字,而不是注释)
./program.sh -a -b # #
./program.sh -b # # -a
./program.sh -b # #
-a
没有选项,只是一个开/关-b
后面总是两个数字。我尝试使用getopts
,它适用于-a
和第一个数字-b
,但是我无法访问第二个数字。由于有时-a
紧跟-b
之后,将输入的“余数”视为字符串无法正常工作。
我尝试使用一个循环,当发现-b
时,会查看接下来要设置的两个值,如下所示:
for i in "$@"; do
case "$i" in
-a)
upperCase=true;
;;
-b)
first=$(($i+1));
second=$(($i+2));
;;
*)
;;
esac
done
输出应该是从#到#的两个方向上的字母,但是我可以正常工作,我唯一的问题实际上是接收输入。
答案 0 :(得分:1)
也许此循环会起作用,而不是:
while [[ $# -gt 0 ]]
do
case "$1" in
-a)
upperCase=true;
;;
-b)
first=$2; # Take the next two arguments
second=$3;
shift 2 # And shift twice to account for them
;;
*)
;;
esac
shift # Shift each argument out after processing them
done
$(($i+1))
只是将一个变量添加到变量i
中,而不是根据需要获取下一个位置参数。