KSH分割字符串问题



我在变量Var中有一个字符串。值是这样的

Var="Key1:Val1~Key2:Val2~"

我只需要用"~">

当我尝试Var2=$(echo $Var | sed $'s/~/\n/g')

,检查Var2数组的大小,如下所示:ArrSize=${#Var2[@]}

总是得到1。我想应该是2。请帮助

假设您想使用x=( list of array items )方法填充数组,那么您需要将赋值的右侧包装在一对父元素中,例如:

$ Var2=( $( echo $Var | sed $'s/~/\n/g' ) )
$ typeset -p Var2
typeset -a Var2=(Key1:Val1 Key2:Val2)
$ echo "${#Var2[@]}"
2

完成相同任务但减少子进程调用开销的其他选项:

字符串:

$ Var2=( $(sed 's/~/ /g' <<< "${Var}") )
$ typeset -p Var2
typeset -a Var2=(Key1:Val1 Key2:Val2)
$ echo "${#Var2[@]}"
2

参数替代:

$ Var2=( ${Var//~/ } )
$ typeset -p Var2
typeset -a Var2=(Key1:Val1 Key2:Val2)
$ echo "${#Var2[@]}"
2

注意:虽然${var//~/ }ksh中工作,但其他shell(例如bash)要求~被转义(即~);ksh似乎可以同时工作-~~=所以我已经更新了答案,包括转义

最新更新