Bash

將數組解析為 bash 腳本中的許多關鍵字參數之一

  • September 7, 2019

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

試試這個:

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

引用自:https://unix.stackexchange.com/questions/539424