Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Gestione dei parametri posizionali In massa

A volte è utile gestire tutti i parametri posizionali come un gruppo. Ad esempio, potremmo voler scrivere un "wrapper" attorno a un altro programma. Ciò significa che creiamo uno script o una funzione di shell che semplifica l'invocazione di un altro programma. Il wrapper, in questo caso, fornisce un elenco di opzioni arcane della riga di comando e quindi passa un elenco di argomenti al programma di livello inferiore.

La shell fornisce due parametri speciali per questo scopo. Entrambi si espandono nell'elenco completo dei parametri posizionali, ma differiscono in modi piuttosto sottili. Loro sono:


Tabella 32-1: I parametri speciali * e @


Parametro Descrizione

Parametro Descrizione

$* Si espande nell'elenco dei parametri posizionali, a partire da 1. Se racchiuso tra virgolette, si espande in una stringa tra virgolette contenente tutti i parametri posizionali, ciascuno separato dal primo carattere della variabile di shell IFS (per impostazione predefinita uno spazio carattere).


Immagine

$@ Si espande nell'elenco dei parametri posizionali, a partire da 1. Quando è racchiuso tra virgolette, espande ogni parametro posizionale in una parola separata racchiusa tra virgolette.


Immagine


Ecco uno script che mostra questi parametri speciali in azione:

Gestione dei parametri posizionali in massa


#! / Bin / bash

# posit-params3: script per dimostrare $* e $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params() {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "parola" "parole con spazi"

#! / Bin / bash

# posit-params3: script per dimostrare $* e $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params() {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "parola" "parole con spazi"


In questo programma piuttosto contorto, creiamo due argomenti: "parola" e "parole con spazi", e li passiamo al pass_params funzione. Tale funzione, a sua volta, li trasmette al print_params funzione, utilizzando ciascuno dei quattro metodi disponibili con gli appositi parametri $* ed $@. Quando eseguito, lo script rivela le differenze:


Immagine

[io@linuxbox~]$ posi-param3


$*:


$1

=

parola

$2

=

parole

$3

=

con

$4

=

spazi

"$*":


$1

=

parola parole con spazi

$2

=

$3

=

$4

=

$@:


$1

=

parola

$2

=

parole

$3

=

con

$4

=

spazi

"$@":

$1 = parola


$2 = parole con spazi

$ 3 =

$ 4 =

$2 = parole con spazi

$ 3 =

$ 4 =


Con i nostri argomenti, entrambi $* ed $@ produrre un risultato di quattro parole:

parola parole con spazi

"$*" produce un risultato di una parola:

"parole con spazi"

"$@" produce un risultato di due parole:

"parola" "parole con spazi"

che corrisponde al nostro intento effettivo. La lezione da trarre da ciò è che anche se la shell fornisce quattro modi diversi per ottenere l'elenco dei parametri posizionali, "$@" è di gran lunga il più utile per la maggior parte delle situazioni, perché preserva l'integrità di ogni parametro posizionale.


Il miglior sistema operativo cloud computing su OnWorks: