我有一个 bash 脚本 ( script.sh
),它接受多种格式的参数--keyword value
。当使用以下行调用脚本时会读入它:
# Get our arguments using flags,
while [[ "$#" > 1 ]]; do
case "$1" in
"--h")
help
exit
;;
"--param1") param1="$2"; shift 2;;
"--param2") param2="$2"; shift 2;;
"--param3") param3="$2"; shift 2;;
esac
done
假设我想引入一个--param4
接受一个或多个参数而不是仅一个参数的 。例如
bash ./script.sh --param1 a --param2 b --param3 c --param4 x y z
命令不应该理论上很重要,所以在点击 param4 后,我们应该继续拉入下一个参数,直到我们点击另一个 --param 标志。
我怎样才能真正解析这个列表?最终目标是迭代 param4,将其作为参数提供给 Python 脚本。 (就像是):
for item in $param4; do
python my_python_script.py --${item}
done
答案1
尝试这个:
usage(){ echo 'usage: ...'; exit 2; }
while [ "$#" -gt 1 ]; do
case $1 in
--param1) param1=$2; shift 2;;
--param2) param2=$2; shift 2;;
--param3) param3=$2; shift 2;;
--param4)
shift
while [ "$#" -gt 0 ]; do
case $1 in
--param*) break;;
*) param4+=("$1"); shift;;
esac
done
;;
*) usage ;;
esac
done
[ "$#" -gt 0 ] && usage
for p in "${param4[@]}"; do
echo python "--$p"
done