Create associative array in bash 3

前端 未结 5 1911
独厮守ぢ
独厮守ぢ 2020-12-01 06:31

After thoroughly searching for a way to create an associative array in bash, I found that declare -A array will do the trick. But the problem is, it is only for

5条回答
  •  抹茶落季
    2020-12-01 06:47

    Here is another post/explanation on associative arrays in bash 3 and older using parameter expansion:
    https://stackoverflow.com/a/4444841

    Gilles' method has a nice if statement to catch delimiter issues, sanitize oddball input ...etc. Use that.

    If you are somewhat familiar with parameter expansion:
    http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

    To use in your scenario [ as stated: sending to script ]: Script 1: sending_array.sh

    # A pretend Python dictionary with bash 3 
    ARRAY=( "cow:moo"
            "dinosaur:roar"
            "bird:chirp"
            "bash:rock" )
    
    bash ./receive_arr.sh "${ARRAY[@]}"
    

    Script 2: receive_arr.sh

    argAry1=("$@")
    
    function process_arr () {
        declare -a hash=("${!1}")
        for animal in "${hash[@]}"; do
            echo "Key: ${animal%%:*}"
            echo "Value: ${animal#*:}"
        done
    }
    
    process_arr argAry1[@]
    
    exit 0
    

    Method 2, sourcing the second script: Script 1: sending_array.sh

    source ./receive_arr.sh
    # A pretend Python dictionary with bash 3 
    ARRAY=( "cow:moo"
            "dinosaur:roar"
            "bird:chirp"
            "bash:rock" )
    
    process_arr ARRAY[@]
    

    Script 2: receive_arr.sh

    function process_arr () {
        declare -a hash=("${!1}")
        for animal in "${hash[@]}"; do
            echo "Key: ${animal%%:*}"
            echo "Value: ${animal#*:}"
        done
    }
    

    References:
    Passing arrays as parameters in bash

提交回复
热议问题