使用命名输入参数编写Bash函数

时间:2015-11-03 00:29:58

标签: macos bash terminal

我想编写一个使用命名输入参数而不是位置参数的Bash函数(例如${0}${1})。这是可能的,如果可以的话,我该如何做到这一点?

3 个答案:

答案 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),在大多数情况下使用它太复杂和沉重。