我遇到的问题与此问题中的解决方案类似:How do I split a string on a delimiter in Bash?。
真正的区别在于我的目标是sh
和ksh
shell,例如,我无法使用<<<
重定向。
为了回顾我的问题,我有一个
变量的内容VALUES="
val1 ;val2 ;val3
another1;another2;another3
"
很明显,空格和
;
是我想摆脱的角色。
我还必须使用这些值,因为它们以3乘3的方式显示,当时为3,但我认为为此我可以简单地使用$1
,$2
和{{1扩展后加上每个周期结束时的$3
。
感谢。
答案 0 :(得分:4)
VALUES="
val1 ;val2 ;val3
another1;another2;another3
"
echo "$VALUES" | while IFS=' ;' read v1 v2 v3; do
[[ -z $v1 && -z $v2 && -z $v3 ]] && continue
echo "v1=$v1 v2=$v2 v3=$v3"
done
v1=val1 v2=val2 v3=val3
v1=another1 v2=another2 v3=another3
重新阅读你的问题,你正在谈论阵列。你走了:
typeset -a values
typeset -i i=0
echo "$VALUES" | while IFS=' ;' read v1 v2 v3; do
[[ -z $v1 && -z $v2 && -z $v3 ]] && continue
values[i]=$v1
values[i+1]=$v2
values[i+2]=$v3
((i+=3))
done
for i in "${!values[@]}"; do printf "%d\t%s\n" $i "${values[i]}"; done
0 val1
1 val2
2 val3
3 another1
4 another2
5 another3
答案 1 :(得分:2)
您可以使用awk并降低所有复杂性:
echo "$VALUES"|awk -F' *; *' 'NF>1{print $1, $2, $3}'
val1 val2 val3
another1 another2 another3