我想编写一个使用命名输入参数而不是位置参数的Bash函数(例如${0}
或${1}
)。这是可能的,如果可以的话,我该如何做到这一点?
答案 0 :(得分:2)
只需将参数重新分配给更直观的内容:
function test {
foo=$1
bar=$2
baz=$3
echo "Function got called with parameters $foo, $bar and $baz"
}
如果您正在寻找能够让脚本更加用户友好的内容,请查看getopt
。
答案 1 :(得分:0)
不是开箱即用,不是你喜欢的方式。每个bash脚本编写者都会很快地运行它。
如果您需要脚本在多台计算机上运行,那么您几乎必须推出自己的解决方案。如果它只需要在一个环境中工作,您可以使用依赖项加载它,让您的生活更轻松。
快速谷歌搜索'bash命名参数'将以您想要的方式提供无数资源。
答案 2 :(得分:0)
您可以使用内置的getopts为一个单字母命名的参数赋值:
doSomething () {
local key
local -A param
while getopts ': a: b: c' key; do
param[$key]=${OPTARG:-1}
done
declare -p param
}
doSomething -a 'Be Patient' \
-b 'ThinkBeforeYouGo' \
-c
" while"循环使用doSomething:
param=( [a]="Be Patient" [b]="ThinkBeforeYouGo" [c]="1" )
您可以使用getopt而不是getopts来处理" long"键,但getopt不是BASH内置的,不幸的是(并且不像非常简单和直观的getopts),在大多数情况下使用它太复杂和沉重。