Cosa significa $ # nella shell?


25

Cosa $#significa in shell?

Ho un codice come

if [ $# -eq 0 ]
then

Voglio capire cosa $#significa, ma la ricerca di Google è pessima per la ricerca di questo tipo di cose.


3
Per le ricerche con segni di punteggiatura, mi piace usare symbolhound.com. Di solito trova quello che mi serve.
Eric Andres,

puoi consultare il manuale
miracle173

Per un migliore riferimento e SEO: bang, segno di numero , sharp, U + 0023, & # 35 ;, segno di commento e dollaro!
Clément,

Risposte:


37

Puoi sempre controllare la pagina man della tua shell. man bashdice:

Special Parameters
   #      Expands to the number of positional parameters in decimal.

Pertanto uno script di shell può verificare quanti parametri vengono forniti con codice come questo:

if [ "$#" -eq 0 ]; then
  echo "you did not pass any parameter"
fi

@NoName Puoi manquasi tutto, incluso manse stesso. Prova anche un apropospo 'di tempo.
un CVn

@NoName puoi anche, quando usi un sistema operativo con strumenti GNU (linux, ecc.) Usare infosia per la pagina man, sia per informazioni addizionali (molto dettagliate e compartimentate) se i pacchetti ne hanno
Olivier Dulac

12

In realtà,

`$` refer to `value of` and
`#` refer to `number of / total number`

Quindi insieme

`$#` refer to `The value of the total number of command line arguments passed.`

Quindi, puoi usare $#per controllare il numero di argomenti / parametri passati come hai fatto e gestire eventuali situazioni impreviste.

Allo stesso modo, abbiamo

`$1` for `value of 1st argument passed`
`$2` for 'value of 2nd argument passed`

eccetera.


8

Questo è

  1. il numero di parametri con cui è stato chiamato lo script

  2. il numero di parametri che sono stati impostati nello script da set -- foo bar

  3. (se usato all'interno di una funzione) il numero di parametri con cui è stata chiamata una funzione ( setfunzionerebbe anche lì).

Questo è spiegato nella pagina man di bash nel blocco "Parametri speciali".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.