Bash

將命名參數傳遞給 shell 腳本

  • January 24, 2022

是否有任何簡單的方法可以將命名參數傳遞(接收)到 shell 腳本?

例如,

my_script -p_out '/some/path' -arg_1 '5'

並在裡面my_script.sh接收它們:

# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']

printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"

這在 Bash 或 Zsh 中可行嗎?

如果您不介意僅限於單字母參數名稱 ie my_script -p '/some/path' -a5,那麼在 bash 中您可以使用內置的ie getopts,例如

#!/bin/bash

while getopts ":a:p:" opt; do
 case $opt in
   a) arg_1="$OPTARG"
   ;;
   p) p_out="$OPTARG"
   ;;
   \?) echo "Invalid option -$OPTARG" >&2
   exit 1
   ;;
 esac

 case $OPTARG in
   -*) echo "Option $opt needs a valid argument"
   exit 1
   ;;
 esac
done

printf "Argument p_out is %s\n" "$p_out"
printf "Argument arg_1 is %s\n" "$arg_1"

然後你可以做

$ ./my_script -p '/some/path' -a5
Argument p_out is /some/path
Argument arg_1 is 5

有一個有用的Small getopts 教程,或者您可以help getopts在 shell 提示符下鍵入。

編輯:如果選項沒有參數並且後跟另一個選項,例如, 和s 程序,則循環中的第二條case語句觸發。while``-p``my_script -p -a5``exit

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