输入变量包含:
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/