Pagina 1 di 1

Settare il valore di IFS

Inviato: sab 3 dic 2005, 19:12
da napoleone1981
Ciao,
per uno script in bash devo modificare il valore della variabile d'ambinete IFS. Di edfault è <space><tab><newline>, mentre io vorrei togliere lo <space> (in modo che in un ciclo for i nomi dei file con gli spazi non me li faccia diventare più file).... Come cavolo si fa???
Ho provato con:

Codice: Seleziona tutto

IFS="\t\n";
IFS=\t\n;
IFS='\t\n';
IFS=$\t$\n;
IFS=<tab><newline>
Ma nulla!!!!!!!!!!!
Aiuto!!!

Inviato: sab 3 dic 2005, 19:27
da MAT
Usa export. I nomi dei file con spazi comunque li puoi trattare benissimo se racchiudi il nome fra virgolette. Ad esempio

Codice: Seleziona tutto

for i in *
do
if [ -r "$i" ]; then
echo "$i is readable"
fi
done
O forse non era questo che intendevi?

Inviato: sab 3 dic 2005, 19:41
da Paoletta
prova con

Codice: Seleziona tutto

 IFS=$'\t\n' 
comunque IMHO è meglio la soluzione di MAT

Inviato: dom 4 dic 2005, 2:35
da napoleone1981
Il punto è che io con find mi vado a cercare tutti i file all'interno di una directory (e delle sottosirectory... quindi in * non andrebbe bene...). Dopodichè li metto tutti in un file (per comodità) e poi faccio il bel for i in `cat ...`
Quindi credo che la soluzione di paoletta (se funziona, ora provo) sia più adatta...
Grazie

Inviato: dom 4 dic 2005, 10:22
da gallows
Perché invece del ciclo for non usi:

Codice: Seleziona tutto

$ find $sorgente -name "*.jpg" -exec cp {} $destinazione \;
?

ps. $sorgente e $destinazione sono le directory,

Inviato: dom 4 dic 2005, 18:02
da targzeta
La soluzione è il comando interno echo. Anche io mi diverto a volte a modificare questa variabile.

IFS=$(echo -e "\t\n")

l'opzione -e di echo ti permette di inserire i caratterni non stampabili.

Oppure pui fare anche:

IFS=${IFS# }

Nota lo spazio dopo il #. Leggi il paragrafo "Parameter Expansion" della bash.

Errata Corrige

Inviato: dom 4 dic 2005, 18:16
da targzeta
Riciao,
la prima soluzione è sbagliata, non è

IFS=$(echo -e "\t\n")

ma

IFS=$(echo -e "\n\t")

con la prima soluzione IFS viene settata solo a "\t". Perchè? La risposta è
nel paragrafo Command Substitution di bash, più precisamente:
" Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted."
Ovvero, durante la sostituzione del comando con il suo standard output, i
newline finali vengono cancellati.