我想在我在.bash_profile中定义的函数中使用getopts。
这个想法是我想传递一些标志到这个函数来改变它的行为。
这个想法是我想传递一些标志到这个函数来改变它的行为。
这里是代码:
function t() { echo $* getopts "a:" OPTION echo $OPTION echo $OPTARG }
当我调用它像这样:
t -a bc
我得到这个输出:
-a bc ?
怎么了?我想获得值bc,而不需要手动移动和解析。如何在函数内正确使用getopts?
编辑:更正我的代码片段尝试$ OPTARG,无效
正如@Ansgar指出的,你的选项的参数存储在$ {OPTARG},但这不是在函数内使用getopts时唯一需要注意的。您还需要确保$ {OPTIND}是本地的函数,通过取消设置或声明它本地,否则你会遇到意外的行为,当多次调用该函数。
t.sh:
#!/bin/bash foo() { foo_usage() { echo "foo: [-a <arg>]" 1>&2; exit; } local OPTIND o a while getopts ":a:" o; do case "${o}" in a) a="${OPTARG}" ;; *) foo_usage ;; esac done shift $((OPTIND-1)) echo "a: [${a}],non-option arguments: $*" } foo foo -a bc bar quux foo -x
示例运行:
$ ./t.sh a: [],non-option arguments: a: [bc],non-option arguments: bar quux foo: [-a <arg>]
如果您注释掉#个当地OPTIND,这是您得到的:
$ ./t.sh a: [],non-option arguments: bar quux a: [bc],non-option arguments: