使用bash迭代数组并收集值
我想迭代一个数组,并用head(a)收集类别中的所有值。对于每个标题,应收集值使用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
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
使用。修复它识别的问题。然后,更新你的问题。谢谢你的建议