On Fri, 28 Oct 2011 09:33:02 +0200 Michele Bert <micbert75@xxxxxxxxx> wrote: > Devo cambiare il nome di una serie di files da *_torre_*.txt in "* > torre *.txt" > La riga che mi viene in mente, basata sul primo dei due comendi, è: > > for file in *_torre_*.txt ; do mv $file \"`echo $file |sed > "s/_torre_/ torre /"`\"; done > > questa non va perché il comando mv vede gli spazi prima e dopo torre > come separatori, e quindi si vede 4 argomenti invece di 2. > È la shell che interpreta il comando inserito, secondo le sue regole[1]: solo *dopo* questo passaggio la shell crea un sottoprocesso (o più d'uno) nel quale viene eseguito il comando che le indichi, al quale "arrivano" una serie di parametri, individuati dalla shell secondo le regole di "spezzettamento" della linea di comando. Nel primo caso l'errore potrebbe essere quel backslash che anteponi alle doppie virgolette: così facendo dici qualcosa del tipo "occhio che il carattere che segue non è quello che sembra": $ conta_parametri() { > echo $# > } $ conta_parametri 1 2 3 3 $ conta_parametri "1 2 3" 1 $ conta_parametri \"1 2 3\" 3 Come vedi, nel terzo caso alla funzione "conta_parametri" arrivano 3 parametri, non 1 come nel secondo, dove la shell interpreta le doppie virgolette come delimitatore di un singolo argomento. > Il secondo caso non riesco ad implementarlo, perché non trovo come > inserire il carattere '\' nella stringa sostitutiva del comando sed. Ma sarebbe errato farlo, quindi al di là di soddisfare la curiosità di come inserirlo, non te ne faresti nulla :-) ciao, lele. [1] in particolare utilizzando il contenuto della variabile "IFS" (che per default contiene uno spazio e il newline) come lista di caratteri da utilizzare per "separare" i "campi"... IFS -> Interactive Field Separators -- nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia. lele@xxxxxxxxxxxxxxx | -- Fortunato Depero, 1929. -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx