11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capitolo 9. Variabili riviste<br />

All’interno degli script <strong>di</strong> shell, la variabile speciale $@ viene utilizzata come strumento per filtrare<br />

un dato input. Il costrutto cat "$@" permette <strong>di</strong> gestire un input da uno script, dallo st<strong>di</strong>n o da file<br />

forniti come parametri. Ve<strong>di</strong> Esempio 12-21 e Esempio 12-22.<br />

Cautela<br />

I parametri $* e $@ talvolta si comportano in modo incoerente e<br />

sorprendente. Questo <strong>di</strong>pende dall’impostazione <strong>di</strong> $IFS.<br />

Esempio 9-7. Comportamento incoerente <strong>di</strong> $* e $@<br />

#!/bin/bash<br />

# Comportamento non corretto delle variabili interne <strong>Bash</strong> "$*" e "$@",<br />

#+ <strong>di</strong>pendente dal fatto che vengano utilizzate o meno con il "quoting".<br />

# Gestione incoerente della sud<strong>di</strong>visione delle parole e del ritorno a capo.<br />

set -- "Il primo" "secondo" "il:terzo" "" "Il: :quinto"<br />

# Imposta gli argomenti dello script, $1, $2, ecc.<br />

echo<br />

echo ’IFS con il valore preimpostato, utilizzando "$*"’<br />

c=0<br />

for i in "$*" # tra doppi apici<br />

do echo "$((c+=1)): [$i]" # Questa riga rimane invariata in tutti gli esempi.<br />

# Visualizza gli argomenti.<br />

done<br />

echo ---<br />

echo ’IFS con il valore preimpostato, utilizzando $*’<br />

c=0<br />

for i in $* # senza apici<br />

do echo "$((c+=1)): [$i]"<br />

done<br />

echo ---<br />

echo ’IFS con il valore preimpostato, utilizzando "$@"’<br />

c=0<br />

for i in "$@"<br />

do echo "$((c+=1)): [$i]"<br />

done<br />

echo ---<br />

echo ’IFS con il valore preimpostato, utilizzando $@’<br />

c=0<br />

for i in $@<br />

do echo "$((c+=1)): [$i]"<br />

done<br />

echo ---<br />

113

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!