如何在 shell 中解析长格式参数?

2024-04-03

我所看到的一切都使用getopt或者稍微花哨一点的getopts仅支持单字符选项(例如,-h但不是--help)。我想做一些花哨的长选择。


我做过类似的事情this http://blogger.ziesemer.com/2010/01/dyndns-update-client-shell-script.html:

_setArgs(){
  while [ "${1:-}" != "" ]; do
    case "$1" in
      "-c" | "--configFile")
        shift
        configFile=$1
        ;;
      "-f" | "--forceUpdate")
        forceUpdate=true
        ;;
      "-r" | "--forceRetry")
        forceRetry=true
        ;;
    esac
    shift
  done
}

正如您所看到的,这很好地支持单字符和较长的选项。它允许将值与每个参数相关联,就像下面的情况一样--configFile。它也具有相当的可扩展性,对于可以配置哪些选项等没有人为限制。

如上所述,"${1:-}"防止在 bash“严格”模式下运行时出现“未绑定变量”错误(set -euo pipefail).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 shell 中解析长格式参数? 的相关文章

  • 保存和恢复陷阱状态?管理多个陷阱处理程序的简单方法?

    有什么好的方法可以覆盖bash陷阱处理程序不会永久破坏可能已设置或尚未设置的现有处理程序 动态管理任意陷阱例程链怎么样 有没有办法保存陷阱处理程序的当前状态 以便以后可以恢复 在 Bash 中保存和恢复陷阱处理程序状态 我将提交以下堆栈实现
  • 设置 Pyenv 的路径

    我正在尝试在我的服务器中设置 Pyenv 的加载路径 bashrc file 我正在关注这个tutorial https realpython com intro to pyenv 它要求我们在哪里设置pyenv到加载路径 然而 在我的 b
  • 如何使 case 语句匹配数字范围?

    我正在运行一个列号范围为 0 50 的开关案例 现在每个案例都支持离散列号 我观察到它的失败 这是代码 i 10 a 1 b 0 65 if a b then case i in 1 2 5 echo Not OK 9 10 12 echo
  • 此 bash 命令在 Makefile 中未正确运行

    在 Makefile 里面我有这样的 release version poetry version cut f2 d echo release version 如果我运行 我的终端中的语句将毫无问题地运行 gt version poetry
  • POSIX SH 构建循环变量,其元素包含空格

    这是我需要的代码 bin sh x1 a1 a2 x2 b1 b2 list SOMETHING for x in list do echo x done 以及我想要的输出 a1 a2 b1 b2 问题是 应该做什么SOMETHING是 我
  • 目录 * 和文件顺序

    我需要将目录中的所有文件连接到一个文件 但具有指定名称的文件必须位于输出的顶部 只是在做cat gt result将按字母顺序连接所有文件 有什么办法告诉猫放置文件vars css或任何其他输出的开头 现在我只是重命名文件需要首先000 f
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • 如何将参数传递给java bash脚本? [复制]

    这个问题在这里已经有答案了 我有一个简单的 bash 脚本来运行我的 java 程序 就这个 run sh bin sh java jar target my jar arch jar 我想将参数传递给这个脚本 该脚本必须将它们传递给jav
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • bash 支持字边界正则表达式吗?

    我试图在再次添加该单词之前匹配列表中是否存在该单词 以避免重复 我正在使用 bash 4 2 24 并尝试以下操作 foo bmyword b also foo
  • 在bash中,是否有相当于“错误消息”的东西

    在 perl 中 您可以使用错误消息退出die some msg bash 中是否有等效的单个命令 现在 我正在使用命令来实现这一点 echo some msg exit 1 你可以很容易地自己推出 die echo 1 gt 2 exit
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行
  • 语法错误:for 循环变量不正确

    我正在尝试编写一个可以在后台调高收音机音量的脚本 bin sh for i 80 i lt 101 i do amixer cset numid 1 i sleep 60 done 但我有问题 alarmclock vol sh 3 ala
  • Mongodb shell mongo:通常只允许每个套接字地址(协议/网络地址/端口)使用一次。对于套接字:0.0.0.0:27017

    前两天还好好的 现在mongod不起作用 甚至echo ps A grep mongo没有打印任何内容 但它警告错误 每个套接字地址只有一种用途 怎么杀掉它 我也尝试过不同的随机端口 他们怎么可能也失败呢 D mongodb win32 x
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • shell脚本中的\r字符

    我在尝试执行 shell 脚本时收到以下错误 r command not found line 2 请提出同样的解决方案 以下是脚本中使用的初始行 bin sh if lt 1 then echo ERROR Environment arg
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while

随机推荐

  • android:删除ldpi/mdpi文件夹的陷阱

    我想知道删除我的 android 项目上的 ldpi mdpi hdpi 文件夹有什么陷阱 我可以只复制可绘制文件夹中的所有图像吗 我确实看到了以下关于 android UI 开发的链接http developer android com
  • SSL 套接字连接超时

    如何在 Java 中配置 SSL 套接字的连接超时 对于普通套接字 我可以简单地创建新的套接字实例 而无需使用任何目标端点new Socket 然后调用连接 SocketAddress端点 int超时 http download oracl
  • struts2 异步操作

    希望使用带有 Serlvet 3 0 异步支持的 Struts2 我的第一个方法是只处理写入操作中的输出流并返回 null 然而 这会返回 404 资源不可用 我试图在 struts 操作中调整 Bosh servlet 使用 Servle
  • 更新应用程序的最佳方式

    我正在使用 WPF 技术开发游戏 我想每三天向游戏添加新功能 更新的大小对我来说很重要 我的游戏需要联网才能启动 就像网络游戏一样 另一个挑战是更新的大小 最重要的注意事项 我需要更新程序不需要停止 你的建议是什么 clickonce 是个
  • 如何将 XYSplineRenderer 图中的正方形形状更改为点

    In JFreeChart XYSplineRenderer Graph I need to display small dots instead of small squares to display XY coordinates How
  • 修改VCL组件代码

    我需要更改组件中的功能 当您收到 您无法覆盖此 消息 或者您需要更改私有方法中的代码 基类中不存在该方法 消息 导致组件无法下降时 您该怎么办 如果我遇到这个问题 我首先尝试从组件或其 CustomXXX 祖先继承 看看是否可以解决问题 如
  • 如何在_Layout视图中访问UserProfile

    在我的 MVC 应用程序中 我有一个共享的 Layout cshtml 文件 用于显示用户的菜单 在该视图上 我想显示来自 UserProfile 实体的信息 使用 SimpleMembership 创建 因此链接到可以在 Layout 页
  • 在 Cordova 应用程序中播放音频

    我正在使用 Cordova 媒体插件在我的移动应用程序中播放音频 我尝试了很多代码 但我没有弄清楚我在底部做错了什么 我放了两段我尝试过的代码 第一个代码 js代码在单独的文件中 var app initialize function th
  • Windows 7 上的 XAMPP 无法正常工作

    我刚刚在 Windows 7 上安装了 XAMPP lite 我有两个驱动器 C 用于操作系统和常规文件 以及外部驱动器 E 我在 E 根目录 上安装了 XAMPP lite 但它一直给我带来问题 Apache 工作得很好 但 MySQL
  • Apache Netbeans 10 CVS 插件不可用?

    我最终升级到 Apache Netbeans 10 从 8 2 并想像往常一样使用菜单安装 CVS 插件Tools gt Plugins gt Available Plugins 但是 我似乎无法找到 访问该插件 在 设置 中 我激活了 N
  • JQuery tablesorter pager 插件在 Edge 模式下无法与 IE11 正常工作

    如果您使用带有分页器的 Tablesorter Jquery 插件 则表上的添加将不会显示任何数据 数据就在那里 但它是隐藏的 我怀疑该插件的浏览器功能检测方法无法处理IE11 还有其他人遇到这个吗 看来IE11的userAgent有问题
  • 使用 snmp 代理注册 OID

    我正在尝试使用 snmp4j 模拟 SNMP 代理 我正在尝试向代理注册 MO 下面是代码片段 static final OID mo1 new OID 1 3 6 1 4 1 1234 1 104 static final OID mo2
  • 在 Coq 中,“if then else”允许非布尔第一个参数?

    我读过一些教程if a then b else c代表match a with true gt b false gt c end 然而 很奇怪的是 前者不检查类型a 而后者当然确保a是一个布尔值 例如 Coq lt Check if nil
  • java中的内存文件系统

    我想用Java创建一个简单的内存文件系统 它有一个根目录 并且能够创建新的子目录 在该目录中 我们可以创建新文件 写入文件 读取文件 删除文件以及重命名文件 您能否提供一些从哪里开始的建议 简单的代码或资源 自定义文件系统提供程序必须实现
  • 临时值在此语句结束时被释放[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Select 箱子抓取网页 let document Document from read response unwrap for node in document find Class lia
  • HTML5 视频,如果没有 .ogv 文件,则回退到 Flash

    如果不存在必要的文件类型 如何回退到 Flash 视频播放器 例如这段代码
  • 我可以在为服务器提供 API 的同时提供静态文件吗?

    所以我对网络开发还很陌生 现在我和我更加面向网络的朋友开始了一个项目 他向我扔了各种各样的框架 我们正在做 Vuejs jade stylus 和 jeet 对于新手来说 这当然非常令人困惑 因为没有 Vuejs 示例使用 jade 没有
  • 绘制三角形 iOS

    下面的代码画了一个圆圈 我如何修改现有代码来画一个三角形 colorDotLayer CALayer layer CGFloat width self bounds size width 6 colorDotLayer bounds CGR
  • 为什么我的充电状态接收器总是返回 false?

    我试图检测用户何时插入 或拔出 设备进行充电 在我的接收器中 当我确定它是否已插入时 我总是得到 错误 的状态读数 这是我的代码 在清单中
  • 如何在 shell 中解析长格式参数?

    我所看到的一切都使用getopt或者稍微花哨一点的getopts仅支持单字符选项 例如 h但不是 help 我想做一些花哨的长选择 我做过类似的事情this http blogger ziesemer com 2010 01 dyndns