Bash数组,该数组元素的每个字符作为字符串的字符

时间:2015-03-10 02:52:05

标签: arrays bash element

我试图在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来实现这一目标,但我不知道如何为字符串的每个字符执行此操作。

2 个答案:

答案 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”来破坏计数器。