【问题标题】:Bash array with each character of that array element as a character of a string将该数组元素的每个字符作为字符串的一个字符的 Bash 数组
【发布时间】:2015-03-10 02:52:05
【问题描述】:

我正在尝试通过 bash 中的一个数组进行循环。该数组是“AARON”,目前该数组用 AARON 填充索引 0。我想表现得像这样

ara[0] = A
阿拉[1] = A
阿拉[2] = R
阿拉[3] = O
阿拉[4] = N

我的脚本目前看起来像这样。

#!/bin/bash 宣布计数 声明 -a ara=(AARON) {A..Z} 中的名称 做 计数=$((计数++)) ${ara[*]} 中的字符 做 如果 [[ ${ara[char]} -eq $name ]] echo ${ara[char]} # 用于调试目的。 然后 总和=$((总和 + 计数)) 菲 完毕 完毕 echo $sum #用于调试目的。

通常我会通过设置自定义 IFS 来实现这一点,但我不知道如何为字符串的每个字符做到这一点。

【问题讨论】:

    标签: arrays bash element


    【解决方案1】:

    您希望 = 而不是 -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.
    

    【讨论】:

    • 干得好;本着((count++))的精神:sum=$((sum + count))可以简化为((sum += count))
    【解决方案2】:

    我会这样做:

    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.
    

    您可以在每个字母中添加空格以将 AARON 转换为 bash 数组。此外,您可以使用“let”来增加计数器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-13
      • 2021-08-02
      • 1970-01-01
      • 2011-09-19
      • 2011-09-12
      • 2020-05-18
      • 2017-03-12
      • 1970-01-01
      相关资源
      最近更新 更多