如何把数组和字符串直接互相转换。
(AA BB CC) <==> "AA BB CC"
- 数组 -> 字符串
方法1:
A=(AA BB CC)
S=$(echo "${A[*]}")
A是数组,S是字符串。
S的内容就是"AA BB CC"啦。
如何指定分隔符呢?
A=(AA BB CC)
S=$(IFS=,; echo "${A[*]}")
S="AA,CC,CC"
是不是很简单。
这里要注意的是:
- 要用
${A[*]}
,而不能是${A[@]}
- 得加引号,
"${A[*]}"
,而不能直接echo ${A[*]}
- IFS=,后面要加分号
';'
,即语句分隔符
方法2:自己写代码拼接。
A=(AA BB CC)
for a in "${A[@]}"; do
S="${S:+${S}|}${a}"
done
S="AA|BB|CC"啦。这里使用'|'
作为分隔符。
这里主要用了字符串操作符":+"
来判断S是否为空,如果不是空,则加分隔符'|'
,然后再拼接数组元素;如果是空,则不需要加分隔符。
另外还可以用类似的三元操作符:
A=(AA BB CC)
for a in "${A[@]}"; do
[[ $S == "" ]] && S="$a" || S="$S|$a"
done
或者
A=(AA BB CC)
for a in "${A[@]}"; do
S=$([ "$S" == "" ] && echo "$a" || echo "$S|${a}")
done
- 字符串到数组
方法1:用括号()
S="AA BB CC"
A=(${S})
A就是数组了,A=(AA BB CC)
如果字符串不是以空格分开,那把分隔符变成空格就行啦。
S="AA,BB,CC"
A=(${S//,/ })
方法2:转成换行
S="AA,BB,CC"
A=($(echo $S | tr "," "\n"))
方法3:用read命令
S="AA,BB,CC"
IFS=', ' read -r -a A <<< "$S"
这里IFS定义了两个字符都很(',')和空格(' '),这样当S中含有多余空格时会去掉,比较一下:
S="AA, BB, CC "
IFS=',' read -r -a A1 <<< "$S"
declare -p A1
# declare -a A1='([0]="AA" [1]=" BB" [2]=" CC ")'
IFS=', ' read -r -a A2 <<< "$S"
declare -p A2
# declare -a A2='([0]="AA" [1]="BB" [2]="CC")'
网友评论