Ho dovuto riprendere un mio vecchio script per migliorarlo.
Nel coprpo dello script utilizzo 2 volte il comando "expr index ", la prima volta funziona bene, la seconda volta lo stesso comando non mi dà più il valore che mi aspetto e che dovrebbe essere uguale al primo.
Ho scoperto che la causa del malfunzionamento è un ciclo for sulla stessa stringa al cui interno agisce la 2.a istruzione “expr”. Riporto il codice:
codid=$(ls -l /dev/disk/by-id | grep -i "ata-MAXTOR_STM3160215AS_9RA9A81C")
IFS=$'\n' # IFS sta per "separatore di campo interno"
#------------------------------------------------------------------------------------------------ 1.a esecuzione di "expr index"
pos2=`expr index "$codid" "$IFS"` # estrazione 1.a posizione del campo RITORNO_A_CAPO internamente alla stringa codid
#------------------------------------------------------------------------------------------------
echo -n "posiz.separatore="; echo "$pos2"
ind=0
for IFS in $codid; do
((ind++))
echo "n. blocchi di tipo id=$ind"
done
lungh=`expr length "$codid"`
echo "lungh-codid=${lungh}"
totind=$ind
echo "totind=$totind"
ind=0
pos2=0
declare -a Tbyid[totind]
for IFS in $codid; do
pos1=$((pos2+1))
#------------------------------------------------------------------------------------------------ 2.a esecuzione di "expr index"
pos2=`expr index "$codid" "$IFS"`
#------------------------------------------------------------------------------------------------
lungh=$((pos2-pos1+1))
echo "$codid"
echo -n "lungh=${$lungh}"
echo "pos1=${pos1}"
echo -n "posiz.separatore="; echo "$pos2"
Tbyid[ind]=${codid:pos1:lungh}
echo "Tbyid[ind]=${Tbyid[ind]}"
((ind++))
exit
done
ecco il risultato
Dovrò trovare un altro metodo di ricerca e caricamento dell’array Tbyid.
Peccato, non me l’aspettavo prorpio.