在 Bash 函数中使用 getopts

2023-12-01

我想用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(使用前将#替换为@)

在 Bash 函数中使用 getopts 的相关文章

  • Bash + sed/awk/cut 删除第 n 个字符

    我试图删除每行的第 6 7 和第 8 个字符 下面是包含文本格式的文件 实际输出 cat test 18 40 12 172 16 70 217 UP 18 42 15 172 16 70 218 DOWN 格式化后如下所示 cat tes
  • 如何将后台作业的输出分配给 bash 变量?

    我想在 bash 中运行后台作业并将其结果分配给一个变量 我不喜欢使用临时文件 并且希望同时运行多个类似的后台任务 root root var echo hello world root root echo var hello world
  • 为什么在 php 类中作为数组项的函数不起作用

    比如我有这样一段代码 效果很好 但是如果 A 不仅仅是一个变量 而且是一个类方法 那么这不起作用
  • C 函数声明中的无类型参数

    最近我一直在查看 Steven Skiena 的在线资源中的一些 C 示例代码 算法设计手册 http www cs sunysb edu skiena algorist book programs 并且对他的一些函数调用的语法感到困惑 诚
  • 替换 R 中内置函数的定义?

    sparcl 包使用标准 stat 包中的 kmeans 函数 我想让它使用我自己的 kmeans 实现 一种方法是编辑 sparcl 包本身中的代码 我宁愿避免这种情况 因为它会很混乱 而且我不确定如何在 R 中安装编辑过的代码 不幸的是
  • Bash 参数引号和 eval

    我编写了一个 bash 日志记录库 用我公司当前正在使用的一些复杂脚本来实现 在进行日志调用时 我一直致力于提供调用脚本的脚本文件名 BASH SOURCE 和行号 LINENO 但是 我不想依赖用户或实现脚本来将这两个变量作为参数传递 如
  • Scala 函数定义参数列表中不同的括号样式

    Scala 中以下两个函数定义有什么区别 1 def sum f Int gt Int a Int b Int Int code 2 def sum f Int gt Int a Int b Int Int code SBT 的控制台 RE
  • 卷曲:参数列表太长

    我想通过 Sparkpost API 使用curl post 发送一封附有pdf 文件的电子邮件 插入我使用的 pdf 我的 test pdf 约为 200KB data cat test pdf base64 wrap 0 但不知怎的 这
  • 有没有一种舒适的方法可以在 PARI/GP 中生成 n 中的 k 组合?

    假设我在 PARI GP 中有一个包含 n 个元素的向量 我想从 n 个元素中生成 k 个组合 例如 如果向量为 3 7 11 14 18 且 k 3 则输出应为 3 7 11 3 7 14 3 7 18 3 11 14 3 11 18 3
  • 如何从 mysqldump 中删除表

    如何删除 mysqldump 中包含大量表的一个大表的输出 我有一个 6 GB 大的数据库转储 但其中 90 只是一个日志记录表 cache entries 我的备份中不再需要它 如何轻松删除转储中描述大型日志记录表的部分 我找到了这个 h
  • 配置confixtx.yaml文件?

    我正在尝试使用以下内容构建 Hyperledger Fabric 网络 Smartforce 订购者组织 Falcon io ORG1 弗罗斯特 io ORG2 我已经使用 cryptogen 工具生成了所有加密材料 不希望使用 confi
  • 使用 awk 解析日志文件

    我尝试使用以下代码解析日志文件 if line match then awk 2 vFiler echo vFiler 解释 有一些行以这样的模式开头 或 vol 后跟名称 我想找到所有以 或 vol 并将后面的字符串设置为等于变量 但我真
  • 检查 Bash 数组中是否存在元素[重复]

    这个问题在这里已经有答案了 我想知道是否有一种有效的方法来检查 Bash 数组中是否存在元素 我正在寻找类似于我可以在Python中做的事情 例如 arr a b c d if d in arr do your thing else do
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • Bash 和双引号传递给 argv

    我重新设计了这个示例以使其简单 但我想做的是在 bash shell 执行它时获取一个嵌套双引号字符串作为单个 argv 值 这是脚本示例 set x command1 key1 value1 key2 value2 key3 value3
  • 在后台使用 HERE_DOC 方法运行脚本

    我有一个应该在后台运行的脚本 我必须在运行 bash 后立即回答一个问题 我该怎么做 nohup python script py lst lt
  • 如何对数字进行排序? [复制]

    这个问题在这里已经有答案了 下面是代码 Is the sortNumber对数字进行排序的函数 a 和 b 是什么意思以及为什么存在 为什么sortNumber in n sort sortNumber 没有指定任何参数a and b Ja
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 使用 IFS bash 进行 CSV 解析:选择“;”作为分隔符

    我有一个包含 130 列的 CSV 我需要用它来做 3 个 csv 我用 while 和 IFS 循环 因为我需要对每一行的变量进行一些处理 这是我所做的 while IFS read my 130 vars what i do with

随机推荐

  • C# 根据字符串名称实例化一个类

    让多个类做很多事情 我必须实例化其中一个类 填充一些属性并调用一个方法 样本将具有以下方法 例如 public class Method100Response201 public string R1 01 get set public vo
  • 如何在R中计算组合和排列?

    如何计算 R 中组合和排列的数量 The 组合包在 Linux 上安装失败 并显示以下消息 gt install packages Combinations Installing package s into home maxim R x8
  • JSP上传下载视频

    我想设计一个允许管理员下载和上传视频的网站 谁能指导我该怎么做 和上传下载图片一样吗 有网站有例子吗 上传也可以用同样的方法完成 你基本上只需要得到一个InputStream在服务器端 然后您可以写入任何OutputStream你想要 例如
  • Java - 类可以访问其嵌套类的私有字段吗?

    据我了解 私有字段只能在定义它们的类中访问 我有一个基本单链表的代码 public class LinkedList private class Node private String data private Node next priv
  • 使用用户名和密码进行 Flutter Firebase 身份验证

    是否可以使用用户名和密码实施 Firebase 身份验证 不是电子邮件和密码 在 Flutter 中 有没有办法使用 Firebase Auth 插件来做到这一点 从逻辑上讲你可以控制电子邮件地址 我的意思是 如果您愿意 您可以维护电子邮件
  • CSS:将 div 水平设置为 2 行

    可以说我有 div class cont div class single 1 div div class single 2 div div class single 3 div div class single 4 div div cla
  • 在子类的构造函数中使用生成器模式

    我目前正在使用 Builder 模式 严格遵循 Wikipedia 文章中建议的 Java 实现建造者模式 http en wikipedia org wiki Builder pattern 这是一个示例代码 说明了我的实现 public
  • 如何打印 Gremlin 管道/遍历结果

    我在名为的文件中有下面的代码traversal groovy 我从命令行调用gremlin e traversal groovy Begin traversal groovy g TinkerGraphFactory createTinke
  • tkinter - 为什么会有像 bbox 这样的东西?

    现在我更多地使用 tkinter Canvas 我想知道 bbox 的使用 对我来说 我使用 bbox 来获取元素的坐标 但 Canvas 已经有一个方法来返回项目的坐标 那么他们为什么要发明像 bbox 这样的东西呢 对比tcl官方描述h
  • setTimeout不加延迟和立即执行函数一样吗?

    我正在查看网络应用程序中的一些现有代码 我看到了这个 window setTimeout function 这和直接执行函数内容是一样的吗 它不一定会立即运行 也不会显式地将延迟设置为 0 原因是 setTimeout 会从执行队列中删除该
  • MySQL:找出丢失的订单 ID

    我知道这个问题在 StackOverFlow 中被问过好几次 我尝试过其中的一些 但我运气不好 我有一个 MySQL 表 其中有一个字段 orders id 这可能会随机出现在表中 不是按顺序 我需要找出表中缺少哪些 id orders i
  • 用于显示文本模式菜单的库?

    在我正在开发的一个游戏项目中 我的速度严重减慢 甚至到了放弃的地步 因为似乎没有任何库可以简化在文本模式下显示菜单的过程 即 80x25 文本框 command com cmd exe 的本机界面 我需要一些可以提供选择列表的东西 最好包括
  • MVC (5) 根据另一个下拉列表填充[重复]

    这个问题在这里已经有答案了 我知道我可以制作一个包含以下列表的下拉菜单SelectedListItem gt and Html DropDownList someID 和操作系统 我的问题是 如果您有 2 个下拉列表 并且第二个下拉列表取决
  • 如何使用 ROW_NUMBER 对 gridview 和 SQL 自定义查询进行分页

    我有一个执行自定义查询的页面 该查询保存在数据库的某个位置 我需要能够在 gridview 上启用分页 例如 保存在数据库中的查询如下所示 select from requestbases 这将返回 10 000 行 使用下面的方法 我让它
  • mysql从多选中选择最低价格

    表价 user id b01 b02 b03 b04 b05 b06 b07 b08 b09 MP01 21 32 12 34 56 26 21 21 26 MO11 81 332 112 1 12 22 71 17 23 如何从价格 WH
  • 如何在 Spring 批处理中使用决策程序?

    我是 Spring 批次的新手 我创建了一个决策程序 它将 FlowExecutionStatus 返回为 是 否 基于FlowExecutionStatus 我需要打电话step2 or step3 在我下面的代码中 step2 在决胜局
  • WordPress l18n _x() 函数

    我正在尝试理解 WordPress 函数 x 根据 WordPress 网站的解释 在通过上下文消歧时使用 x 示例如下 if false commenttxt commenttxt x Comment noun if false trac
  • 用于求解线性丢番图方程的算法:ax + by = c

    我在这里寻找整数解决方案 我知道它有无数个从第一对解和 gcd a b c 导出的解 然而 我们怎样才能找到第一对解呢 有什么算法可以解决这个问题吗 Thanks Chan 请注意 并不总是有解决方案 事实上 只有一个解决方案 c是的倍数g
  • 关联类型的生命周期绑定被拒绝,尽管它看起来有效

    我有一段无法编译的代码 可以将其简化为以下代码片段 use std error Error use std convert TryFrom A trait that provides methods for parsing data int
  • 在 Bash 函数中使用 getopts

    我想用getopts在我在 bash profile 中定义的函数内 我的想法是我想传递一些标志给这个函数来改变它的行为 这是代码 function t echo getopts a OPTION echo OPTION echo OPTA