shell

bash如何把数组和字符串互相转换

2021-06-26  本文已影响0人  CodingCode

如何把数组和字符串直接互相转换。
(AA BB CC) <==> "AA BB CC"

  1. 数组 -> 字符串

方法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"
是不是很简单。

这里要注意的是:

  1. 要用${A[*]},而不能是${A[@]}
  2. 得加引号,"${A[*]}",而不能直接echo ${A[*]}
  3. 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. 字符串到数组

方法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")'
上一篇 下一篇

猜你喜欢

热点阅读