输入变量包含:
key1-key2-key3_command
输出需要:
command -k key1 -k key2 -k key3
警告:键数可以从1到3不等。
我已计算破折号的数量,并使用if语句为每个键创建一个布尔指示符(即key1 = 1,未设置key2)。然后,如果设置了该键的标志,我将使用${parameter:+word}
之类的内容添加密钥。它开始变得有点凌乱所以我想我会在这里询问最好的方法是什么。
答案 0 :(得分: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[@]}"
注意:
$IFS
的更改只是暂时的;它们不会影响后续命令。"${command[@]}"
(无回声)。答案 1 :(得分:1)
echo "key1-key2-key3_command" | sed -r 's/(.*?)-(.*?)-(.*?)_(.*?)/\4 -k \1 -k \2 -k \3/g'
command -k key1 -k key2 -k key3
答案 2 :(得分:0)
在子shell中运行以避免污染当前的IFS和位置参数
(
IFS="-_"
set -- $var
command=("${!#}")
while [[ "$1" != "${command[0]}" ]]; do
command+=(-k "$1")
shift
done
echo "${command[@]}"
)
删除“echo”以执行。