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