【问题标题】:Search array return index in bash在 bash 中搜索数组返回索引
【发布时间】:2012-01-25 21:28:46
【问题描述】:

只是 pesuocode,但这基本上是我想做的。

Array=("1" "Linux" "Test system"
       "2" "Windows" "Workstation"
       "3" "Windows" "Workstation")


echo "number " ${array[search "$1"]} "is a" ${array[search "$1" +1]} ${array[search "$1" +2])}

这可以通过 bash 实现吗?我只能找到有关搜索和替换的信息。我没有看到任何会返回和索引的内容。

【问题讨论】:

    标签: arrays bash syntax


    【解决方案1】:

    类似的东西应该可以工作:

    search() {
        local i=1;
        for str in "${array[@]}"; do
            if [ "$str" = "$1" ]; then
                echo $i
                return
            else
                ((i++))
            fi
        done
        echo "-1"
    }
    

    虽然循环遍历数组以查找索引当然是可能的,但这种使用关联数组的替代解决方案更实用:

    array=([1,os]="Linux"   [1,type]="Test System"
           [2,os]="Windows" [2,type]="Work Station"
           [3,os]="Windows" [3,type]="Work Station")
    
    echo "number $1 is a ${array[$1,os]} ${array[$1,type]}"
    

    【讨论】:

    • 你没有提到关联数组是 bash 4 唯一的功能
    【解决方案2】:

    您可以从 this link 修改此示例以轻松返回索引:

    # Check if a value exists in an array
    # @param $1 mixed  Needle  
    # @param $2 array  Haystack
    # @return  Success (0) if value exists, Failure (1) otherwise
    # Usage: in_array "$needle" "${haystack[@]}"
    # See: http://fvue.nl/wiki/Bash:_Check_if_array_element_exists
    in_array() {
        local hay needle=$1
        shift
        for hay; do
            [[ $hay == $needle ]] && return 0
        done
        return 1
    }
    

    【讨论】:

    • -1 表示返回 403 的链接,答案完全“晦涩难懂”
    • @Sorin 我没有收到带有该链接的 403。
    • @Dan Fego:如果可以的话,我会附上截图。然而,答案仍然完全模糊,甚至缺乏基本信息。
    • 你可能是对的。但是 OP 也应该在询问之前尝试一些事情(比如简单的互联网搜索)。
    • @Carl Norum:实际上,我花了一段时间才弄明白。无论如何,删除了反对票,因为现在它有更多信息。
    猜你喜欢
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多