erlug
[Top] [All Lists]

Re: [Erlug] Coppie parametro/valore su $stringa

To: erlug@xxxxxxxxxxxxxx
Subject: Re: [Erlug] Coppie parametro/valore su $stringa
From: Davide Brini <db72@xxxxxxxxxxxx>
Date: Tue, 23 Mar 2010 14:03:01 +0000
On Tuesday 23 Mar 2010 13:42:36 Francesco Conti wrote:

> > Dipende da cosa poi devi farci e da dove proviene quell'input, comunque
> > generalmente una cosa del tipo:
> 
> Viene da un comando ls in una directory contenente qualche migliaio di
> file che guardacaso contengono i parametri che mi servono nel nome.

Cioe' tu hai dei file il cui nome e' "fuffa:abc=def:fuffa"? Andiamo bene :-)
 
> > IFS=\: read -r fuffa ciccia fuffa <<< "FUFFA:nomeparametro=CODICE:FUFFA"
> > echo "${ciccia#*=}"
> 
> Interessante, non mi era mai capitata questa sintassi.
> 
> Il problema pero' e' che in presenza di un numero variabile di parametri
> e fuffe presenti sulla stringa in ingresso io devo riuscire ad estrarre
> il valore di un parametro specifico.
> 
> Es:
> 
> fuffa:...:fuffa:parametro1=1000:fuffa:...:fuffa:parametro2=0x234:fuffa:...:
> fuffa:
> 
> devo estrarre il valore di parametro2

Vale lo stesso principio:

IFS=\: read -r f ciccia1 f ciccia2 <<< "FUFFA:abc=DEF:FUFFA:xyz=UUU"
echo "${ciccia1#*=}"
echo "${ciccia2#*=}"

Se invece hai un numero di campi non noto a priori, e devi capire quale e' il 
tuo basandoti sul nome (ie cio' che viene prima del = in un campo), allora 
puoi fare questo:

sbobba="fuffa:fuffa:parametro1=1000:fuffa:fuffa:parametro2=0x234:fuffa"

save=$IFS
IFS=\:
set -f
set -- $sbobba
set +f
IFS=$save

for i; do
  case ${i%=*} in
    parametro1|parametro2)
      echo "il valore di ${i%=*} e' ${i#*=}"
      ;;
  esac
done

il valore di parametro1 e' 1000
il valore di parametro2 e' 0x234

Pero' come ho detto "come" proseguire e/o cosa farci con quei valori dipende 
dalla specifica situazione.

Se vuoi creare una variabile il cui nome e' "parametro1" etc. e il valore e' 
quello che hai trovato, puoi fare

eval "$i"

all'interno del loop di cui sopra.

(ma occhio ad usare eval troppo alla leggera)

<Prev in Thread] Current Thread [Next in Thread>