是否可以在一个命令中调用一个选项并多次调用它?
Is it possible to call one option and it's argument for more times in one command?
这是我的 bash 案例 test-getopt.sh
了解 bash 中的 getopt。
OPTS=$(getopt -o d:eh -- "$@")
eval set -- "$OPTS"
while true; do
case "" in
-d )
if [[ == "a" ]];then
echo "i am -d's arg :a"
elif [[ == "b" ]];then
echo "i am -d's arg :b"
fi
shift;;
-e )
echo "i am e"
shift;;
-h)
echo "help you"
shift;;
-- )
shift;;
*)
break;;
esac
done
要调用选项及其参数,一个选项及其参数一次。
bash test-get.sh -d a
i am -d's arg :a
其他参数。
bash test-get.sh -d b
i am -d's arg :b
我想调用选项,它是一个命令中的所有参数
bash test-get.sh -d a -d b
i am -d's arg :a
有没有办法得到下面的预期输出?
bash test-get.sh -d a -d b
i am -d's arg :a
i am -d's arg :b
基本问题是,当您处理带有参数的选项时,您需要 shift
两次才能从 arg 中删除选项 及其参数 列表。像这样:
OPTS=$(getopt -o d:eh -- "$@")
eval set -- "$OPTS"
while true; do
case "" in
-d )
if [[ == "a" ]];then
echo "i am -d's arg :a"
elif [[ == "b" ]];then
echo "i am -d's arg :b"
fi
shift 2;; # <-- The "2" here is the only change
-e )
echo "i am e"
shift;;
-h)
echo "help you"
shift;;
-- )
shift;;
*)
break;;
esac
done
如果没有双班次,第一次通过循环时,arg 列表是“-d”"a"“-d”"b"“--”。您检测到“-d”和 "a",适当地打印,然后移动,这将 arg 列表保留为 "a"“-d”"b"“--”。第二次循环时,匹配选项"a"失败,执行*)
情况,跳出处理循环
这是我的 bash 案例 test-getopt.sh
了解 bash 中的 getopt。
OPTS=$(getopt -o d:eh -- "$@")
eval set -- "$OPTS"
while true; do
case "" in
-d )
if [[ == "a" ]];then
echo "i am -d's arg :a"
elif [[ == "b" ]];then
echo "i am -d's arg :b"
fi
shift;;
-e )
echo "i am e"
shift;;
-h)
echo "help you"
shift;;
-- )
shift;;
*)
break;;
esac
done
要调用选项及其参数,一个选项及其参数一次。
bash test-get.sh -d a
i am -d's arg :a
其他参数。
bash test-get.sh -d b
i am -d's arg :b
我想调用选项,它是一个命令中的所有参数
bash test-get.sh -d a -d b
i am -d's arg :a
有没有办法得到下面的预期输出?
bash test-get.sh -d a -d b
i am -d's arg :a
i am -d's arg :b
基本问题是,当您处理带有参数的选项时,您需要 shift
两次才能从 arg 中删除选项 及其参数 列表。像这样:
OPTS=$(getopt -o d:eh -- "$@")
eval set -- "$OPTS"
while true; do
case "" in
-d )
if [[ == "a" ]];then
echo "i am -d's arg :a"
elif [[ == "b" ]];then
echo "i am -d's arg :b"
fi
shift 2;; # <-- The "2" here is the only change
-e )
echo "i am e"
shift;;
-h)
echo "help you"
shift;;
-- )
shift;;
*)
break;;
esac
done
如果没有双班次,第一次通过循环时,arg 列表是“-d”"a"“-d”"b"“--”。您检测到“-d”和 "a",适当地打印,然后移动,这将 arg 列表保留为 "a"“-d”"b"“--”。第二次循环时,匹配选项"a"失败,执行*)
情况,跳出处理循环