使用bash迭代数组并收集值

使用bash迭代数组并收集值,bash,Bash,我想迭代一个数组,并用head(a)收集类别中的所有值。对于每个标题,应收集值 myArray=( 'A' '0' 'A' '0' '1' '2' 'A' '0' '1' '2' '3' '4' ) for i in "${myArray[@]}"; do result=$(echo "${myArray[myItem]}"|grep -c "[A-Z]"); while [ "$result" -ne 0 ]; do printf '%s: ' "${myArray[my

我想迭代一个数组,并用head(a)收集类别中的所有值。对于每个标题,应收集值

myArray=( 'A' '0' 'A' '0' '1' '2' 'A' '0' '1' '2' '3' '4' )

for i in "${myArray[@]}"; do
  result=$(echo "${myArray[myItem]}"|grep -c "[A-Z]");
  while [ "$result" -ne 0 ]; do
      printf '%s: ' "${myArray[myItem]}"
      myItem=$((myItem+1))
      result=$(echo "${myArray[myItem]}"|grep -c "[A-Z]");
  done

  result=$(echo "$i"|grep -c "[0-9]");
  while [ "$result" -ne 0 ]; do
      printf '%s ' "${myArray[myItem]}"
      myItem=$((myItem+1))
      result=$(echo "${myArray[myItem]}"|grep -c "[0-9]");
  done
  echo ""
done
期望输出:

A: 0
A: 0 1 2
A: 0 1 2 3 4
A: 0
A: 0 1 2
A: 0 1 2 3 4
不幸的是,我得到:

A:
0
A:
0 1 2
A: 0 1 2 3 4
A: 0
A: 0 1 2
A: 0 1 2 3 4 ./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected
我该怎么办

第二种变体:

#!/bin/bash

myArray=( 'A' '0' 'A' '0' '1' '2' 'A' '0' '1' '2' '3' '4' )

for i in "${myArray[@]}"; do

  result=$(echo "${myArray[myItem]}"|grep -c "[A-Z]");
  while [ "$result" -ne 0 ]; do
    if [ "${myArray[myItem]}" == "A" ]; then
      printf '%s: ' "${myArray[myItem]}"
      myItem=$((myItem+1))
    else
      break
    fi
  done

  result=$(echo "$i"|grep -c "[0-9]");
  while [ "$result" -ne 0 ]; do
    if [ "${myArray[myItem]}" != "A" ]; then
      printf '%s ' "${myArray[myItem]}"
      myItem=$((myItem+1))
    else
      echo ""
      break
    fi
  done
done
期望输出:

A: 0
A: 0 1 2
A: 0 1 2 3 4
A: 0
A: 0 1 2
A: 0 1 2 3 4
不幸的是,我得到:

A:
0
A:
0 1 2
A: 0 1 2 3 4
A: 0
A: 0 1 2
A: 0 1 2 3 4 ./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected

./myTestArray.bash: line 19: [: !=: unary operator expected
我应该做些什么来消除错误

Thx提前试一试:

myArray=( 'A' '0' 'A' '0' '1' '2' 'A' '0' '1' '2' '3' '4' )

fmt="%s:"
for i in "${myArray[@]}"; do
    case "$i" in
        [A-Z])
            printf "$fmt" "$i"
            fmt='\n%s:'
            ;;
        *)
            printf " %s" "$i"
            ;;
    esac
done
echo ""
这将遍历数组。对于数组中的每个元素
$i
,它决定它是否为大写字符。如果是,则打印在行首,后跟冒号。如果不是,则打印一个空格,后跟元素

这将产生以下输出:

$ bash script
A: 0
A: 0 1 2
A: 0 1 2 3 4

使用。修复它识别的问题。然后,更新你的问题。谢谢你的建议