shell中的参数大多是按顺序解析.然后${1..n}引用
在使用中其实有很多地方不是很方便,比如,对调用时参数位置的强依赖性等.
像go语言有flag包可以提供较为完备的参数解析功能.
shell就只能source了.
个人比较常用的套路就是eval+awk 完成字符串解析以及赋值.
直接上代码.
Parse_args(){
local args="$@"
local arg_name="operation|module|env"
eval $(awk -vArgs_name="$arg_name" -vArgs="$args" '
BEGIN{
split(Args_name,arg_array,"|")
for(index in arg_array){
match(Args,"-"substr(arg_array[index],0,1)" ?([^ -]+)",tmp_array)
print arg_array[index]"="tmp_array[1]
}
}
')
}