2015-08-26 10 views
5

Io uso sempre [email protected] quando voglio tutti gli argomenti della funzione bash ma recentemente ho appena trovato che $* funziona anche nello stesso modo, e può anche usare come indice dell'array.

La mia domanda è Qual è la differenza tra $* e [email protected] in Bash? e quale dovrei preferire?

+0

Vedere http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_05_02 – Jubobs

+1

Per vedere la differenza, provare a utilizzare un argomento contenente uno spazio, ad esempio: 'myscript.sh" abc "d' . –

risposta

7

Il Bash manual è abbastanza chiaro su questo argomento:

  • $*

    Tutti i parametri posizionali, visto come una sola parola.

    Nota: $* deve essere citato.

  • [email protected]

    Uguale $*, ma ogni parametro è una stringa tra virgolette, cioè, i parametri vengono passati intatti, senza interpretazione o l'espansione. Ciò significa, tra le altre cose, che ogni parametro nella lista degli argomenti è visto come una parola separata.

    Nota: Ovviamente, è necessario indicare [email protected].

+0

Che ne dici di '$ 1',' $ 2' ...? dovrei anche citarli? – fronthem

+0

@ terces907 idealmente, sì. Tuttavia, se sai per certo che ogni argomento non contiene caratteri del tuo IFS, non è necessario. Come nota a margine 'echo $ *' e 'echo $ @' senza alcuna quotazione sono equivalenti – Aserre

+0

Vedi ulteriori http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable – tripleee

2

C'è uno sviluppo storico qui. $* è risultato insufficiente, pertanto è stato introdotto [email protected] per sostituirlo. Ci sono ancora situazioni in cui è utile $*; ma a meno che tu non voglia specificamente suddividere i token citati, dovresti evitarlo.

Problemi correlati