将数组解析为 bash 脚本中的多个关键字参数之一

将数组解析为 bash 脚本中的多个关键字参数之一

我有一个 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

相关内容