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)
|