将每个两个元素重击成数组

时间:2019-02-18 16:00:36

标签: arrays bash split

我有文本和每个换行器,将其值存储在数组中并显示它:

include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')

输出:

var=("AAA
      aaa
      BBB
      bbb
      CCC
      ccc")

SAVEIFS=$IFS
 IFS=$'\n'
var=($var)
IFS=$SAVEIFS

for (( i=0; i<${#var[@]}; i++ )) do
  echo "${var[$i]}"
done

但是我要在同一个索引数组中的两个第一个元素,每个元素都包含换行符,像这样

   AAA
   aaa
   BBB
   bbb
   CCC
   ccc

1 个答案:

答案 0 :(得分:2)

如果您使用bash ANSI-C Quoting声明数组

ary=($'AAA\naaa' $'BBB\nbbb' $'CCC\nccc')

然后,您得到了想要的东西。

检查数组的内容

$ declare -p ary
declare -a ary='([0]="AAA
aaa" [1]="BBB
bbb" [2]="CCC
ccc")'

或使用printf检查它:

$ printf '>%s<\n' "${ary[@]}"
>AAA
aaa<
>BBB
bbb<
>CCC
ccc<

你不能写

 var[0]=("AAA
         aaa")

因为带有括号,您正在尝试将数组存储在数组元素中,而bash不允许使用数组数组。

可以

var=(
"AAA
aaa"
"BBB
bbb"
"CCC
ccc"
)

如果您有var=(AAA aaa BBB bbb CCC ccc)之类的单词数组,则可以像这样将元素分组在一起:

ary=()
for (( i=0; i < ${#var[@]}; i+=2 )); do
    ary+=( "${var[i]}"$'\n'"${var[i+1]}" )
done