我试图在bash中循环一个数组。阵列是" AARON"目前该数组使用AARON填充索引0。我想表现得像这样
ara [0] = A
ara [1] = A
ara [2] = R
ara [3] = O
ara [4] = N
我的脚本目前看起来像这样。
#!/bin/bash declare count declare -a ara=(AARON) for name in {A..Z} do count=$((count++)) for char in ${ara[*]} do if [[ ${ara[char]} -eq $name ]] echo ${ara[char]} # for debugging purposes. then sum=$((sum + count)) fi done done echo $sum #for debugging purposes.
通常我会通过设置自定义IFS来实现这一目标,但我不知道如何为字符串的每个字符执行此操作。
答案 0 :(得分:3)
您希望=
而不是-eq
进行字符串比较。
您的echo ${ara[char]}
行是if
测试的一部分,不属于if
正文。
您的count=$((count++))
作业无法正常工作(始终将count
设置为零)您想要((count++))
或count=$((++count))
。
您可以使用${strvar:pos:count}
获取字符串的一部分。
这样的事情:
#!/bin/bash
declare count
declare -a ara=(AARON)
for name in {A..Z}
do
((count++))
for ((i=0; i<=${#ara[0]}; i++))
do
echo ${ara[0]:i:1} # for debugging purposes.
if [[ ${ara[0]:i:1} = $name ]]
then
sum=$((sum + count))
fi
done
done
echo $sum # for debugging purposes.
答案 1 :(得分:0)
我会做这样的事情:
declare count
declare -a ara=(A A R O N)
for name in {A..Z}
do
for character in ${ara[*]}
do
if [[ ${character} == ${name} ]]
then
echo ${character} '=' ${name} # for debugging purposes.
let 'sum=sum+1'
fi
done
done
echo $sum #for debugging purposes.
您可以在每个字母中添加空格,以便在bash数组中转换AARON。此外,您可以使用“let”来破坏计数器。