imitando dicionario em shell script

Started by Imoogi, 21 de February , 2010, 02:34:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Imoogi

domingão, nada pra faze, um calorão dos inferno só podia dar nisso.

eu fiz umas funçõeszinhas que mais ou menos imitam os dicionarios de Python, usando array.


#!/bin/bash

function keys(){
x=0
eval 'qu=$((${#'$1'[@]} / 2 - 1))'

for ((i=0;i<=$qu;i++))
do

eval ''$2'[$i]=${'$1'[$x]}'
x=$(($x+2))

done
}


function values(){
x=1
eval 'qu=$((${#'$1'[@]} / 2 - 1))'

for ((i=0; i<=$qu; i++))
do

eval ''$2'[$i]=${'$1'[$x]}'
x=$(($x+2))

done
}


function dict(){
eval 'qu=${#'$1'[@]}'


for ((i=0; i<=$qu; i++))
do
eval 'vec=${'$1'[$i]}'

if [ "$vec" == "$2" ]
then
v=$(($i+1))
eval ''$3'=${'$1'[$v]}'
fi
done
}




a estrutura é assim, você faz um array contendo as chaves e valores, ex:

                valor        valor     valor
                   v               v            v
arr=(joao 27 maria 23 jose 18)
          ^               ^              ^     
      chave      chave      chave



a função keys retorna um array com todas as chaves,
a sintaxe é assim.

         nome do array que esta as chaves/valores, assim msm, sem o "$"
           v
keys 'arr' 'chaves'
                      ^
                   variavel a qual você quer associar o valor que retorna da função

depois você pode tratar a variavel como um array comum

$ echo ${chaves
  • } #mostra todas as chaves

    $ joao maria jose



    A função values retorna todos os valores,
    a sintaxe é assim.

               nome do array que esta os chaves/valores
                   v
    values 'arr' 'valores'
                              ^
                         variavel a qual você quer associar o valor que retorna da função


    depois você pode tratar a variavel como um array comum

    $ echo ${valores
  • } #mostra todas os valores

    $ 27 23 18


    A função dict retorna o valor da chave passada,
    a sintaxe é assim.

                  chave
                      v
    dict 'arr' 'joao' 'va'
             ^                ^
         array        variavel a qual você quer associar o valor


    depois você pode tratar a variavel

    $ echo $va

    $ 27


    não sei se vai ser util, mas ta ai!!