在Bash函数中使用getopts

前端之家收集整理的这篇文章主要介绍了在Bash函数中使用getopts前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我在.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:

除此之外,其用法与在函数外使用时相同。

猜你在找的Bash相关文章