我在变量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
似乎可以同时工作-~
和~
=所以我已经更新了答案,包括转义