如何在 bash 中访问命令行标志的多个选项
How to access multiple options for a command line flag in bash
我想访问标志的多个命令行输入,但我无法让它工作。输入顺序不受我控制,格式为(#是数字,不是注释)
./program.sh -a -b # #
./program.sh -b # # -a
./program.sh -b # #
-a
没有选项,只是一个切换 on/off
-b
后面总是跟着两个数字。
我试过使用 getopts
,这适用于 -a
和 -b
的第一个数字,但我无法访问第二个数字。由于有时 -a
出现在 -b
之后,将输入的 'remainder' 视为字符串无法按预期工作。
我尝试使用一个循环,当它找到 -b
时,查看接下来要设置的两个值,如下所示:
for i in "$@"; do
case "$i" in
-a)
upperCase=true;
;;
-b)
first=$(($i+1));
second=$(($i+2));
;;
*)
;;
esac
done
输出应该是从 # 到 # 的两个方向打印的字母,但我已经做到了,我唯一的问题实际上是接收输入。
也许这个循环会起作用,而不是:
while [[ $# -gt 0 ]]
do
case "" in
-a)
upperCase=true;
;;
-b)
first=; # Take the next two arguments
second=;
shift 2 # And shift twice to account for them
;;
*)
;;
esac
shift # Shift each argument out after processing them
done
$(($i+1))
只是给变量i
加一,而不是你想要的取下一个位置参数。
我想访问标志的多个命令行输入,但我无法让它工作。输入顺序不受我控制,格式为(#是数字,不是注释)
./program.sh -a -b # #
./program.sh -b # # -a
./program.sh -b # #
-a
没有选项,只是一个切换 on/off-b
后面总是跟着两个数字。
我试过使用 getopts
,这适用于 -a
和 -b
的第一个数字,但我无法访问第二个数字。由于有时 -a
出现在 -b
之后,将输入的 'remainder' 视为字符串无法按预期工作。
我尝试使用一个循环,当它找到 -b
时,查看接下来要设置的两个值,如下所示:
for i in "$@"; do
case "$i" in
-a)
upperCase=true;
;;
-b)
first=$(($i+1));
second=$(($i+2));
;;
*)
;;
esac
done
输出应该是从 # 到 # 的两个方向打印的字母,但我已经做到了,我唯一的问题实际上是接收输入。
也许这个循环会起作用,而不是:
while [[ $# -gt 0 ]]
do
case "" in
-a)
upperCase=true;
;;
-b)
first=; # Take the next two arguments
second=;
shift 2 # And shift twice to account for them
;;
*)
;;
esac
shift # Shift each argument out after processing them
done
$(($i+1))
只是给变量i
加一,而不是你想要的取下一个位置参数。