bash 스크립트의 여러 키워드 인수 중 하나로 배열을 구문 분석합니다.

bash 스크립트의 여러 키워드 인수 중 하나로 배열을 구문 분석합니다.

script.sh여러 형식의 인수를 받아들이는 bash 스크립트()가 있습니다 --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

관련 정보