在Bash函数中使用getopts
发布时间:2020-12-15 20:05:39 所属栏目:安全 来源:网络整理
导读:我想在我在.bash_profile中定义的函数中使用getopts。 这个想法是我想传递一些标志到这个函数来改变它的行为。 这里是代码: function t() { echo $* getopts "a:" OPTION echo $OPTION echo $OPTARG} 当我调用它像这样: t -a bc 我得到这个输出: -a bc?
我想在我在.bash_profile中定义的函数中使用getopts。
这个想法是我想传递一些标志到这个函数来改变它的行为。 这里是代码: function t() { echo $* getopts "a:" OPTION echo $OPTION echo $OPTARG } 当我调用它像这样: t -a bc 我得到这个输出: -a bc ? 怎么了?我想获得值bc,而不需要手动移动和解析。如何在函数内正确使用getopts? 编辑:更正我的代码片段尝试$ OPTARG,无效 编辑#2:OK结果代码是很好,我的shell不知何故搞乱了。打开一个新窗口解决了。 arg值确实在$ 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: 除此之外,其用法与在函数外使用时相同。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |