加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读