我想用getopts
在我在 .bash_profile 中定义的函数内。
我的想法是我想传递一些标志给这个函数来改变它的行为。
这是代码:
function t() {
echo $*
getopts "a:" OPTION
echo $OPTION
echo $OPTARG
}
当我像这样调用它时:
t -a bc
我得到这个输出:
-a bc
?
怎么了?我想获得价值bc
无需手动移位和解析。我该如何使用getopts
正确地在函数内部?
编辑:更正了我的代码片段以尝试 $OPTARG,但无济于事
编辑#2:好吧,结果代码没问题,我的外壳不知何故搞砸了。打开一个新窗口就解决了。 arg 值确实在 $OPTARG 中。
正如@Ansgar指出的,你的选项的参数存储在${OPTARG}
,但这并不是使用时唯一需要注意的事情getopts
在函数内部。您还需要确保${OPTIND}
通过取消设置或声明它对于函数来说是本地的local
,否则多次调用该函数时会遇到意外行为。
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>]
如果你评论出来# local OPTIND
,这就是你得到的:
$ ./t.sh
a: [], non-option arguments:
a: [bc], non-option arguments: bar quux
a: [bc], non-option arguments:
除此之外,它的用法与在函数外部使用时相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)