【问题标题】:bash each two elements into array将每两个元素 bash 放入数组中
【发布时间】:2019-02-18 16:00:35
【问题描述】:

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

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

但我想要在同一个索引数组中的两个第一个元素,每个元素内部都有换行符,就像那样

 var[0]=("AAA
         aaa")
  var[1]=("BBB
         bbb")
   var[2]=("CCC
         ccc")

【问题讨论】:

  • var 只有一个元素时,为什么它是一个数组?只需使用var=("AAA" "aaa" "BBB" "bbb" "CCC" "ccc")。如果该字符串来自外部源并且您必须逐行拆分,请使用readarray -t var &lt;&lt;&lt; "$str" 而不是var=("$str")
  • 那么这只是数组切片的问题。 var2+=("${var[*]:i:2}") for i=0,2,4,....

标签: arrays bash split


【解决方案1】:

如果你使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2021-01-19
    相关资源
    最近更新 更多