मुझे रॉबर्ट मैकमैहन का उत्तर यहाँ सबसे अच्छा लगता है क्योंकि यह उपयोग करने में सबसे आसान लगता है जिसमें आपकी किसी भी स्क्रिप्ट का उपयोग करने के लिए फाइलें शामिल हैं। लेकिन यह if [[ -n ${variables[$argument_label]} ]]
संदेश फेंकने वाली रेखा के साथ दोष लगता है , "चर: खराब सरणी सबस्क्रिप्ट"। मेरे पास टिप्पणी करने का प्रतिनिधि नहीं है, और मुझे संदेह है कि यह उचित 'फिक्स' है, लेकिन इसे साफ करने if
में लपेटना if [[ -n $argument_label ]] ; then
।
यहाँ कोड मेरे साथ समाप्त हुआ है, यदि आप एक बेहतर तरीका जानते हैं तो कृपया रॉबर्ट के उत्तर में एक टिप्पणी जोड़ें।
फ़ाइल शामिल करें "झंडे- declares.sh"
# declaring a couple of associative arrays
declare -A arguments=();
declare -A variables=();
# declaring an index integer
declare -i index=1;
फ़ाइल शामिल करें "झंडे- तर्क"
# $@ here represents all arguments passed in
for i in "$@"
do
arguments[$index]=$i;
prev_index="$(expr $index - 1)";
# this if block does something akin to "where $i contains ="
# "%=*" here strips out everything from the = to the end of the argument leaving only the label
if [[ $i == *"="* ]]
then argument_label=${i%=*}
else argument_label=${arguments[$prev_index]}
fi
if [[ -n $argument_label ]] ; then
# this if block only evaluates to true if the argument label exists in the variables array
if [[ -n ${variables[$argument_label]} ]] ; then
# dynamically creating variables names using declare
# "#$argument_label=" here strips out the label leaving only the value
if [[ $i == *"="* ]]
then declare ${variables[$argument_label]}=${i#$argument_label=}
else declare ${variables[$argument_label]}=${arguments[$index]}
fi
fi
fi
index=index+1;
done;
आपका "script.sh"
. bin/includes/flags-declares.sh
# any variables you want to use here
# on the left left side is argument label or key (entered at the command line along with it's value)
# on the right side is the variable name the value of these arguments should be mapped to.
# (the examples above show how these are being passed into this script)
variables["-gu"]="git_user";
variables["--git-user"]="git_user";
variables["-gb"]="git_branch";
variables["--git-branch"]="git_branch";
variables["-dbr"]="db_fqdn";
variables["--db-redirect"]="db_fqdn";
variables["-e"]="environment";
variables["--environment"]="environment";
. bin/includes/flags-arguments.sh
# then you could simply use the variables like so:
echo "$git_user";
echo "$git_branch";
echo "$db_fqdn";
echo "$environment";