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

spi*_*zak 2 variables bash shell

输入变量包含:

key1-key2-key3_command
Run Code Online (Sandbox Code Playgroud)

输出需要是:

command -k key1 -k key2 -k key3
Run Code Online (Sandbox Code Playgroud)

警告:键数可以从1到3不等.

我已经计算了破折号的数量,并使用if语句为每个键创建一个布尔指示符(即key1 = 1,unset key2).然后,${parameter:+word}如果设置了该键的标志,我将使用类似的东西来添加密钥.它开始变得有点凌乱,所以我想我会在这里询问实现这一目标的最佳方法是什么.

Joh*_*ica 5

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[@]}"
Run Code Online (Sandbox Code Playgroud)

笔记:

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