Bash扩展哈希表(字典)

use*_*400 2 bash hash dictionary

我尝试使用文件中的数据填充哈希表.有了这段代码

      templates="./templates"
      declare -A ARRAY
      ARRAY+=([a]='b')
      ARRAY+=([d]='f')
      cat $templates | while read line 
      do
      a=`(echo $line | cut -d ':' -f 1)`
      b=`(echo $line | cut -d ' ' -f 2)`
      ARRAY+=([a]=b)
      done


      for x in ${!ARRAY[@]}
      do
      echo "$x - ${ARRAY["$x"]}"
      done
Run Code Online (Sandbox Code Playgroud)

它只给我

  a - b
  d - f
Run Code Online (Sandbox Code Playgroud)

模板文件是:

nazwisko: towar
Kowalski: ksiazki
Nowak: programy
Run Code Online (Sandbox Code Playgroud)

Jos*_*ght 6

您的代码存在一个问题,并且可能会发生许多简化.

一,问题:

这一行:

ARRAY+=([a]=b)
Run Code Online (Sandbox Code Playgroud)

应该:

ARRAY+=(["$a"]="$b")
Run Code Online (Sandbox Code Playgroud)

为了简化:

declare -A arr=([a]=b [d]=f)
while IFS=': ' read -r a b; do
    arr+=(["$a"]="$b")
done < "$templates"

for i in "${!arr[@]}"; do
    printf '%s - %s\n' "$i" "${arr[$i]}"
done
Run Code Online (Sandbox Code Playgroud)