bash - 解析命令和命令选项的 bash 变量

标签 bash shell variables

输入变量包含:

key1-key2-key3_command

输出需要是:

command -k key1 -k key2 -k key3

注意:键的数量可以从 1 到 3 不等。

我计算了破折号的数量,并将其与 if 语句一起使用来为每个键创建一个 bool 指示器(即 key1=1,取消设置 key2)。然后,如果设置了该键的标志,我将使用类似 ${parameter:+word} 的东西来添加该键。它开始变得有点困惑,所以我想我应该在这里问一下实现这一目标的最佳方法是什么。

最佳答案

var='key1-key2-key3_command'

IFS=_ read -r  keys command <<< "$var"   # Split $var at underscores.
IFS=- read -ra keys         <<< "$keys"  # Split $keys at dashes, -a to save as array.

for key in "${keys[@]}"; do              # Treat $command as an array and add
    command+=(-k "$key")                 # -k arguments to it.
done

echo "${command[@]}"

注意事项:

  • 这可以处理任意数量的键。
  • 处理其中包含空格的键。
  • $IFS 的更改只是暂时的;它们不会影响后续命令。
  • 如果要执行命令,请将最后一行更改为简单的 "${command[@]}"(无回显)。

关于bash - 解析命令和命令选项的 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346215/

相关文章:

linux - 从日志文件中搜索并打印特定数字

php - 重用 php 类变量

linux - 生成删除文件列表的脚本

bash - 回归 : Exported Bash function lost after going through another process

c - Bash 没有这样的文件或目录错误(缓存模拟器)

linux - 将变量值插入文件

linux - 将更多文件的行数与文件名组合起来

bash - 终端工作流快捷方式

java - 被困在访问非最终变量上?

c++ - 在其定义中引用变量是否合法?