Bash
將命名參數傳遞給 shell 腳本
是否有任何簡單的方法可以將命名參數傳遞(接收)到 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 中您可以使用內置的iegetopts
,例如#!/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