[Risolto] expr index non mi funziona

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.

Ho risolto così

  declare -a Tbyid
#set -x      # Visualizza tutti i comandi prima della loro esecuzione.
  IFS=$'\n'   # IFS sta per "separatore di campo interno"
  Tbyid=(`ls -l /dev/disk/by-id | grep -i "ata-MAXTOR_STM3160215AS_9RA9A81C" | tr IFS ' '`)          # carica tabella coi risultati filtrati del comando
  TotEle=${#Tbyid*]}
  echo ${#Tbyid*]}        #  mostra il N° degli elementi di una tabella
  ind=0
  for ((ind=0;ind\<"$TotEle";++ind));do
	echo "Elem.${ind}"; echo ${Tbyid[ind]}    #  mostra il contenuto di ciascun elemento di una tabella
	echo
  done

segue risultato ottenuto

Più che soddisfatto !!!

Alla fine ho trovato una soluzione semplicissima, mentre inizialmente avevo pensato ad un metodo logicamente complesso.