Is there a way to create key-value pairs in Bash script?

后端 未结 5 2088
不思量自难忘°
不思量自难忘° 2020-12-22 19:05

I am trying to create a dictionary of key value pair using Bash script. I am trying using this logic:

declare -d dictionary
defaults write \"$dictionary\" ke         


        
相关标签:
5条回答
  • 2020-12-22 19:11

    in older bash (or in sh) that does not support declare -A, following style can be used to emulate key/value

    # key
    env=staging
    
    
    # values
    image_dev=gcr.io/abc/dev
    image_staging=gcr.io/abc/stage
    image_production=gcr.io/abc/stable
    
    img_var_name=image_$env
    
    # active_image=${!var_name}
    active_image=$(eval "echo \$$img_var_name")
    
    echo $active_image
    
    0 讨论(0)
  • 2020-12-22 19:20

    For persistent key/value storage, you can use kv-bash, a pure bash implementation of key/value database available at https://github.com/damphat/kv-bash

    Usage

    git clone https://github.com/damphat/kv-bash
    source kv-bash/kv-bash
    

    Try create some permanent variables

    kvset myName  xyz
    kvset myEmail xyz@example.com
    
    #read the varible
    kvget myEmail
    
    #you can also use in another script with $(kvget keyname)
    echo $(kvget myEmail)
    
    0 讨论(0)
  • 2020-12-22 19:20

    In bash, we use

    declare -A name_of_dictonary_variable
    

    so that Bash understands it is a dictionary.

    For e.g. you want to create sounds dictionary then,

    declare -A sounds
    
    sounds[dog]="Bark"
    
    sounds[wolf]="Howl"
    

    where dog and wolf are "keys", and Bark and Howl are "values".

    You can access all values using : echo ${sounds[@]} OR echo ${sounds[*]}

    You can access all keys only using: echo ${!sounds[@]}

    And if you want any value for a particular key, you can use:

    ${sounds[dog]}

    this will give you value (Bark) for key (Dog).

    0 讨论(0)
  • 2020-12-22 19:30

    If you can use a simple delimiter, a very simple oneliner is this:

    for i in a,b c_s,d ; do 
      KEY=${i%,*};
      VAL=${i#*,};
      echo $KEY" XX "$VAL;
    done
    

    Hereby i is filled with character sequences like "a,b" and "c_s,d". each separated by spaces. After the do we use parameter substitution to extract the part before the comma , and the part after it.

    0 讨论(0)
  • 2020-12-22 19:31

    In bash version 4 associative arrays were introduced.

    declare -A arr
    
    arr["key1"]=val1
    
    arr+=( ["key2"]=val2 ["key3"]=val3 )
    

    The arr array now contains the three key value pairs. Bash is fairly limited what you can do with them though, no sorting or popping etc.

    for key in ${!arr[@]}; do
        echo ${key} ${arr[${key}]}
    done
    

    Will loop over all key values and echo them out.

    Note: Bash 4 does not come with Mac OS X because of its GPLv3 license; you have to download and install it. For more on that see here

    0 讨论(0)
提交回复
热议问题