9.5 Sostituzione di parametri

Si può riferirsi ai parametri in modo astratto e sostituire i loro valori in base a delle condizioni, usando gli operatori definiti qui sotto. Ancora una volta si possono usare le parentesi graffe ({}) per isolare la variabile e il suo operatore.

$parametro sostituisce questa stringa con il valore di parametro
${parametro} come sopra. Le parentesi sono d'aiuto se non c'è separazione tra questo parametro e una stringa adiacente.
$parametro= setta parametro a null.
${parametro-default} se parametro non è settato allora si usa default come valore. parametro non viene resettato.
${parametro=default} se parametro non è settato allora lo si setta a default e si usa il nuovo valore
${parametro+nuovo_valore} se parametro è settato allora si usa nuovo_valore altrimenti non si usa nulla. parametro non viene resettato.
${parametro?messaggio} se parametro non è settato allora si visualizza il messaggio. Se parametro è settato allora si usa il valore corrente.

Non ci sono spazi nei precedenti operatori. Se un due punti (:) viene inserito prima di -, =, + o ? allora si effettua prima un test per vedere se il parametro ha un settaggio non-nullo.

La shell C ha alcuni modi aggiuntivi per la sostituzione di parametri:

$lista[n] seleziona l'n-esima parola dalla lista
${lista[n]} come sopra
$#lista riporta il numero di parole in lista
$?parametro ritorna 1 se il parametro è settato, 0 altrimenti
${?parametro} come sopra
$< legge una linea da stdin(4)

Inoltre la shell C definisce l'array $argv[n] per contenere gli n argomenti della linea di comando e $#argv per il numero di argomenti, come specificato in Tabella 9.1.

Per illustrare alcune di queste caratteristiche si userà il seguente script di prova:

#!/bin/sh
param0=$0
test -n "$1" && param1=$1
test -n "$2" && param2=$2
test -n "$3" && param3=$3
echo 0: $param0
echo "1: ${param1-1}: \c" ;echo $param1
echo "2: ${param2=2}: \c" ;echo $param2
echo "3: ${param3+3}: \c" ;echo $param3

Inizialmente nello script si verifica con test(1) se la variabile esiste; in tal caso si setta il parametro al suo valore. Dopo si riportano i valori, effettuando le sostituzioni.

Nella prima esecuzione dello script non vengono forniti argomenti:

$ ./parameter.sh
0: ./parameter.sh       # trova sempre $0
1: 1:                   # sostituisce  1, ma non assegna questo valore
2: 2: 2                 # sostituisce 2 e assegna questo valore
3: :                    # non sostituisce

In questa seconda esecuzione dello script si forniscono alcuni argomenti:

$ ./parameter one two three
0: ./parameter.sh       # trova sempre $0
1: one: one             # non sostituisce, ha già un valore
2: two: two             # non sostituisce, ha già un valore
3: 3: three             # sostituisce 3 ma non assegna questo valore

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <[email protected]>.
Per domande su questa documentazione, invia una e-mail a <[email protected]>.