在 Bash 中使用 getopts 检索单个选项的多个参数

2023-12-02

我需要帮助getopts.

我创建了一个 Bash 脚本,运行时如下所示:

$ foo.sh -i env -d 目录 -s 子目录 -f 文件

当处理每个标志的一个参数时,它可以正常工作。但是,当我从每个标志调用多个参数时,我不确定如何从变量中提取多个变量信息getopts.

while getopts ":i:d:s:f:" opt
   do
     case $opt in
        i ) initial=$OPTARG;;
        d ) dir=$OPTARG;;
        s ) sub=$OPTARG;;
        f ) files=$OPTARG;;

     esac
done

获取选项后,我想从变量构建目录结构

foo.sh -i test -d directory -s subdirectory -s subdirectory2 -f file1 file2 file3

那么目录结构将是

/test/directory/subdirectory/file1
/test/directory/subdirectory/file2
/test/directory/subdirectory/file3
/test/directory/subdirectory2/file1
/test/directory/subdirectory2/file2
/test/directory/subdirectory2/file3

有任何想法吗?


You can 多次使用相同的选项并将所有值添加到数组中.

对于这里非常具体的原始问题,Ryan 的mkdir -p解决方案显然是最好的。

然而,对于更普遍的问题使用 getopts 从同一选项获取多个值, 这里是:

#!/bin/bash

while getopts "m:" opt; do
    case $opt in
        m) multi+=("$OPTARG");;
        #...
    esac
done
shift $((OPTIND -1))

echo "The first value of the array 'multi' is '$multi'"
echo "The whole list of values is '${multi[@]}'"

echo "Or:"

for val in "${multi[@]}"; do
    echo " - $val"
done

输出将是:

$ /tmp/t
The first value of the array 'multi' is ''
The whole list of values is ''
Or:

$ /tmp/t -m "one arg with spaces"
The first value of the array 'multi' is 'one arg with spaces'
The whole list of values is 'one arg with spaces'
Or:
 - one arg with spaces

$ /tmp/t -m one -m "second argument" -m three
The first value of the array 'multi' is 'one'
The whole list of values is 'one second argument three'
Or:
 - one
 - second argument
 - three
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Bash 中使用 getopts 检索单个选项的多个参数 的相关文章

  • sh / Bash shell 脚本中 !# (bang-pound) 的含义是什么?

    我想了解这个 Scala 脚本是如何工作的 usr bin env bash exec scala 0 object HelloWorld def main args Array String println Hello world arg
  • 用于计算数据文件中数字列表的平均值的脚本

    文件data txt包含以下内容 1 00 1 23 54 4 213 2 3 4 脚本的输出应该是 ave 54 646 一些简单的脚本是首选 这是一种方法 awk s 1 END print ave s NR RS file ave 5
  • 用等号完成命令选项

    我正在尝试为可能需要表单上的长选项的命令编写一个 Bash 完成脚本 option or param value 如果用户已经在命令行上输入了一个选项 则该选项应从完成列表中排除 假设仅在命令行上指定一次给定选项才有意义 这是第一次尝试 m
  • 如何使用存储在文本文件中的选项在 bash 中显示选择菜单? [复制]

    这个问题在这里已经有答案了 如何使用我存储在文本文件的各行中的选项为用户显示选择菜单 例如 我的文本文件 ingestion txt 如下所示 SOUP FTS CTS JDBC NEW 我希望用户看到这个 Please select an
  • 在 bash 中从文件中读取星号字符 (*)

    我正在从 txt 文件中获取行 说输入 txt a b 然后我正在阅读它 bin bash file 1 ans 0 while read r line n line do echo line done lt file passing th
  • 数组上的 Bash 子字符串扩展

    我有一组带有给定后缀的文件 例如 我有一组带有后缀的pdf文件 pdf 我想使用子字符串扩展来获取不带后缀的文件名 对于单个文件我可以使用 file test pdf echo file 0 4 要对所有文件执行此操作 我现在尝试 file
  • 每当 SQLERROR 永远不起作用时

    我不知道可能是什么原因 我已经在网上花了几个小时试图找出我的情况出了什么问题 我查过官方文档 https docs oracle com cd B19306 01 server 102 b14357 ch12052 htm还有一些汤姆 凯特
  • 如何在 PowerShell 中处理命令行参数

    处理命令行参数的 最佳 方法是什么 似乎有几个关于 最佳 方法是什么的答案 因此我陷入了如何处理像这样简单的事情上 script ps1 n name d domain AND script ps1 d domain n name 有没有一
  • 如何让 STDOUT 和 STDERR 都转到终端和日志文件?

    我有一个脚本 将由非技术用户交互式运行 该脚本将状态更新写入 STDOUT 以便用户可以确定脚本运行正常 我希望将Stdout和STDERR重定向到终端 以便用户可以看到脚本正在工作 并查看是否存在问题 我还希望将两个流都重定向到日志文件
  • 卷曲:参数列表太长

    我想通过 Sparkpost API 使用curl post 发送一封附有pdf 文件的电子邮件 插入我使用的 pdf 我的 test pdf 约为 200KB data cat test pdf base64 wrap 0 但不知怎的 这
  • 配置confixtx.yaml文件?

    我正在尝试使用以下内容构建 Hyperledger Fabric 网络 Smartforce 订购者组织 Falcon io ORG1 弗罗斯特 io ORG2 我已经使用 cryptogen 工具生成了所有加密材料 不希望使用 confi
  • 带有存储在文件中的通配符的 grep

    我希望 grep 通过读取需要从文本文件中过滤掉的内容来过滤掉行 这是我给 grep 的内容 它存储在foo txt Users 1337 X Users 1337 R Users 1337 W 这是它应该过滤的内容 它存储在bar txt
  • Python子进程Exec格式错误

    抱歉 如果这个问题很愚蠢 我正在使用Pythonsubprocess在 Ubuntu Natty 11 04 中调用 bat 文件的语句 但是 我收到错误消息 Traceback most recent call last File pfa
  • 在后台使用 HERE_DOC 方法运行脚本

    我有一个应该在后台运行的脚本 我必须在运行 bash 后立即回答一个问题 我该怎么做 nohup python script py lst lt
  • Bash - 比较 2 个文件列表及其 md5 校验和

    我有 2 个列表 其中包含带有 md5sum 检查的文件 即使文件相同 列表也具有不同的路径 我想检查每个文件的 md5 和 我们正在讨论数千个文件 这就是为什么我需要脚本来仅显示差异 第一个列表是普通列表 第二个列表是文件的当前状态 我想
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • Virtualenv 激活脚本不会在带有 set -euo 的 bash 脚本中运行

    我正在尝试创建一个激活 virtualenv 的 bash 脚本 pip 安装 requests txt 并继续 这将是我的 init sh 脚本 供以后使用 usr bin env bash set euo pipefail DIR sc
  • Bash 字符串之间的比较 - 相等但不相等

    我只想在 Bash 中的两个字符串之间进行非常简单的比较 stat curl Is url head n 1 echo stat if stat HTTP 1 1 200 OK then echo symbol is OK echo sta
  • 带有二进制数据的 Bash echo 命令?

    有人可以解释一下为什么这个脚本有时只返回十六进制字符串表示形式的 15 个字节吗 for i in 1 10 do API IV openssl rand 16 API IV HEX echo n API IV od vt x1 w16 a
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker

随机推荐

  • 通过 Javascript 检测新的 Microsoft Edge v80 (Blink) 的正确方法是什么?

    由于最新版本的 Microsoft Edge 是out并使用 Blink 使用 javascript 区分旧边缘和新边缘的正确方法是什么 目前我计划研究一下navigator userAgent检查旧版本的 Edge 最多 18 个 con
  • requestInterstitialAdPresentation 只能运行一次

    我想知道为什么 self requestInterstitialAdPresentation 只能工作一次 我的意思是 我将此调用绑定到 UIButton 中 第一次运行我的应用程序 然后单击此按钮 广告会正确显示 但是 当我关闭广告并尝试
  • 如何确保运行代码时控制台不会立即关闭?

    我正在尝试学习 C 编程 但是当我运行代码时 cmd 窗口立即关闭 而没有给我更改以查看程序是否打印了我想要的结果 我正在 VS Code 上使用多个扩展对 C 进行编码 是否有设置 扩展 代码片段 或者我可以做些什么 使它不会立即关闭 T
  • C++ - 传递对 std::shared_ptr 或 boost::shared_ptr 的引用

    如果我有一个需要与shared ptr 将其传递给它的引用不是更有效吗 这样可以避免复制shared ptr目的 可能有哪些不良副作用 我设想两种可能的情况 1 在函数内部 由参数组成一个副本 如 ClassA take copy of s
  • 获取p标签的行高[重复]

    这个问题在这里已经有答案了 我想计算出一个的行高 p div 内的标签 var myp document getElementById myp var heightLabel document getElementById heightLa
  • 在 TextMate 问题中用反向引用替换

    我正在使用 TextMate 来替换表达式 my expression 由开括号和闭括号之间的字符组成 my expression 所以我尝试更换 by 1 正则表达式匹配正确的表达式 但替换给出 1 因此该变量不被识别 有人可以有想法吗
  • Google Chart:如何更改负值的颜色

    我目前有一个使用 GoogleCharts 的漂亮的 AreaChart 但是我试图在值为负时更改图表的颜色和背景颜色 根据我的发现 想法是仅显示一个区域用于正值 而另一个区域用于显示负值 以便我可以自定义颜色 然而你可以在下面看到我并没有
  • 当状态是对象数组时更新 React 状态

    我有一个处于状态的对象数组 this state items id 1 someattr a string anotherattr id 2 someattr another string anotherattr id 3 someattr
  • Android ViewPager 方向更改

    我读过 安东尼特的回答这个StackOverflow问题 that FragmentPagerAdapter将尝试重用通过以下方式找到的现有片段FragmentManager findFragmentByTag 方向改变后 我已经尝试过了
  • 具有固定行数和列数的集合视图

    我有一个集合视图 并且希望在多个设备上保持一致的行数和列数 在 iPhone 6s Plus 上 显示 6 个项目 但在 iPhone 5s 上查看应用程序时 仅显示 4 个项目 See my layout here 如何使集合视图在不同设
  • 为什么我会看到 VSCode 中的 let 语句中添加了“: String”?

    当我在 VSCode 中输入以下内容时 let mut guess String new 我看到它变成了 let mut guess String String new 为什么会发生这种情况 这些被称为镶嵌提示 rust analyzer
  • 稍后交付无法在 Rails 5 的测试环境中运行

    基本上 测试配置的设置与 Rails 4 中的工作方式完全相同 传递方法设置为测试等 除了我已替换的已弃用的选项之外 邮件仅使用 Deliver now 发送 而不是 Deliver later Deliver later 在开发环境中工作
  • 嵌入 UIHostingController 中的 NavigationView 具有额外的安全区域插图

    有人知道如何处理这个问题吗 似乎当您有一个带有 NavigationView 的 UIHostingController 时 会发生以下情况 注意大的灰色标签栏安全区域 这主要是一个 UIKit 应用程序 我们正在用 swiftUI 视图替
  • 大于行首的符号

    我刚刚在脚本中看到以下内容 但不确定它的含义 started STATUSDIR EVENT ID started errs STATUSDIR EVENT ID errors started is used to capture the
  • Python - time.sleep(n) 是 CPU 密集型的吗? [复制]

    这个问题在这里已经有答案了 我一直在考虑使用time sleep n 在 python 脚本中使其以不同的时间间隔执行作业 伪代码如下所示 total jobs next jobs to run next closest total job
  • 带输入参数的 MVC jquery ajax 调用

    当我在带有参数的控制器上调用操作时遇到问题 在控制器中我有以下操作 HttpPost public ActionResult UpdateData string month return Json new success true mess
  • org.apache.harmony.xml.ExpatParser$ParseException 的问题

    我的 SaxParser 实现有时会抛出 org apache harmony xml ExpatParser ParseException At line 1 column 0 no element found 例外 在下一次尝试中 效果
  • 执行标量之后:未设置对象引用等

    我应该添加什么代码来接受 WHERE 语句中的 null int numApprovals 0 string sql SELECT COUNT Type AS OpenforApproval FROM dbo LeaveRequest WH
  • JScrollPane 和 JPanel

    所以 我正在制作一种文本编辑器 并且我需要一个 JScrollPane 来进行垂直导航 但我无法让它发挥作用 我已经阅读了谷歌结果前十页上的所有该死的教程 但我无法让它工作 假设我有 JFrame 大小 1000x800 我想在其中放置一个
  • 在 Bash 中使用 getopts 检索单个选项的多个参数

    我需要帮助getopts 我创建了一个 Bash 脚本 运行时如下所示 foo sh i env d 目录 s 子目录 f 文件 当处理每个标志的一个参数时 它可以正常工作 但是 当我从每个标志调用多个参数时 我不确定如何从变量中提取多个变