参数扩展与sh和ksh shell中的分隔符

时间:2014-03-25 20:34:46

标签: shell sh ksh

我遇到的问题与此问题中的解决方案类似:How do I split a string on a delimiter in Bash?

真正的区别在于我的目标是shksh shell,例如,我无法使用<<<重定向。

为了回顾我的问题,我有一个

变量的内容
VALUES="
val1    ;val2    ;val3
another1;another2;another3
"

很明显,空格;是我想摆脱的角色。

我还必须使用这些值,因为它们以3乘3的方式显示,当时为3,但我认为为此我可以简单地使用$1$2和{{1扩展后加上每个周期结束时的$3

感谢。

2 个答案:

答案 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