[Linuxtrent] Re: Esempi shell.

  • From: Lele Gaifax <lelegaifax@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 28 Oct 2011 09:58:05 +0200

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


Other related posts: