1
我想遍歷數組並收集頭中的所有值(A)。對於每個標題,應該收集這些值。用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
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
我該怎麼辦?
二變:
#!/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 ./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提前
使用[shellcheck.net](http://www.shellcheck.net/)。修復它識別的問題。然後,更新你的問題。 – John1024
Thx爲您的建議約翰 – waJe