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 creare uno script o una funzione shell che semplifica l'invocazione di un altro programma. Il wrapper, in questo caso, fornisce un elenco di opzioni della riga di comando e quindi passa un elenco di argomenti al programma di livello inferiore.

La shell fornisce due parametri speciali a questo scopo. Entrambi si espandono nell'elenco completo dei parametri posizionali, ma differiscono in modi piuttosto sottili. 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 doppie, si espande in una stringa tra virgolette doppie contenente tutti i parametri posizionali, ciascuno separato dal primo carattere della variabile shell IFS (per impostazione predefinita uno spazio).


Immagine

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


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" '$* :'; parametri_di_stampa $* echo -e "\n" '"$*" :'; parametri_di_stampa "$*" echo -e "\n" '$@ :'; parametri_di_stampa $@ echo -e "\n" '"$@" :'; parametri_di_stampa "$@"

}


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" '$* :'; parametri_di_stampa $* echo -e "\n" '"$*" :'; parametri_di_stampa "$*" echo -e "\n" '$@ :'; parametri_di_stampa $@ echo -e "\n" '"$@" :'; parametri_di_stampa "$@"

}


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 passa al parametri di stampa funzione, utilizzando ciascuno dei quattro metodi disponibili con i parametri speciali $* e $@Una volta eseguito, lo script rivela le differenze:


Immagine

[io@linuxbox~]$ posit-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 $* e $@ produce un risultato di quattro parole:

parola parole con spazi

"$*" produce un risultato composto da una sola 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 questo è 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 ciascun parametro posizionale.


Il miglior sistema operativo cloud computing su OnWorks: