[bash scripts] passaggio variabili verso funzione

Ciao
come si evince dal seguente script (LINK), quando richiamo la funzione "ReadFileLines", passandole degli argomenti, perdo per strada la variabile "$i".

Chiedo quindi, se avete idea di come poter mantenere tale variabile?


inb4 rtfm : ho già dato una rapida controllata all'Adv.Bash.Guide e un po a google. Ho fatto inoltre alcuni tentativi, racchiudendo la variabile in apici e virgolette, ma niente.
Forse dovrei tradurre la variabile, in qualche modo, all'interno delle brackets (parentesi) della funzione, ma non ho idea di come procedere

Halp!
Certo che la perdi, quando la variabile viene letta dalla shell viene espansa. Nel momento in cui chiami la funzione $i viene trasformata in un valore (che in questo caso è vuoto).
Non so se c'è un workaround per questa cosa, che fra l'altro mi pare parecchio inelegante. Forse potresti provare con il riferimento indiretto: http://tldp.org/LDP/abs/html/ivr.html#IVRREF

Oppure non puoi passare il comando solamente e mettere la variabile direttamente dal ciclo?

$2 $i


Ti risparmio anche dei problemi futuri: ci sono dei potenziali problemi in questo script, il primo che mi viene in mente è che il ciclo for spezza i contenuti del file in base al separatore interno di default dei campi ($IFS) e quindi se non lo aggiusti non avrai in i le variabili che vuoi.

Mi spiego: bash in questo tipi di cicli decide quale carattere usare come separatore di campo in base a una variabile interna che di default è settata allo spazio bianco, non al newline.

per spiegarmi con un esempio, se nel file hai
file numero 1.txt
file numero 2.txt


tu ti aspetti di trovare in i: file numero 1.txt; file numero 2.txt
invece troverai file; numero; 1.txt; file; numero; 2.txt
perchè bash spezza sul carattere vuoto, non sul newline.
Per ovviare a questo problema devi cambiare il valore di IFS per soddisfare i tuoi bisogni.
Vedi: http://tldp.org/LDP/abs/html/internalvariables.html#IFSREF


PS: Vista l'esiguità del codice, non facevi prima a postarlo invece di farci scaricare un file zippato?

#!/bin/bash

# Dummy list
ls -1 / > lista.txt


# Funzione Read-Line
ReadFileLines() {
for i in $(cat $1)
do
$2
done
}


# Esecuzione
ReadFileLines lista.txt "echo $i"

Ciao
grazie intanto per la risposta

L'esempio è semplificato, rispetto a quello che avrei intenzione di fare, e dovendo richiamare più volte la variabile $i, purtroppo non posso inserirla direttamente dentro alla funzione come consigliato.

vabbè dai, al limite risolvo creando la funzione con il ciclo for contenente lo script in se, e non tramite variabile, anche se mi fa perdere un po di flessibilità
update: risolto!

soluzione: http://tinyurl.com/6fkkwev