¿Qué significa $ # en shell?

25

¿Qué $#significa en shell?

Tengo un código como

if [ $# -eq 0 ]
then

Quiero entender qué $#significa, pero la búsqueda de Google es muy mala para buscar este tipo de cosas.

BufBills
fuente
3
Para las búsquedas con signos de puntuación, me gusta usar symbolhound.com. Suele encontrar lo que necesito.
Eric Andres
puede navegar por el manual
miracle173
Para una mejor referencia y SEO: ¡explosión, signo de número , nítido, U + 0023, & # 35 ;, signo de comentario y dólar!
Clément

Respuestas:

37

Siempre puede consultar la página de manual de su shell. man bashdice:

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

Por lo tanto, un script de shell puede verificar cuántos parámetros se dan con un código como este:

if [ "$#" -eq 0 ]; then
  echo "you did not pass any parameter"
fi
michas
fuente
@NoName Puedes mancasi cualquier cosa, incluso a mansí mismo. Prueba también aproposalgo de tiempo.
un CVn
@NoName también puede, al usar un sistema operativo con herramientas GNU (Linux, etc.) usar infopara la página de manual o información adicional (muy detallada y compartimentada) si los paquetes tienen algo
Olivier Dulac
12

Actualmente,

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

Asi juntos

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

Por lo tanto, puede usar $#para verificar la cantidad de argumentos / parámetros pasados ​​como lo hizo y manejar cualquier situación inesperada.

Del mismo modo, tenemos

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

etc.

sivareddy963
fuente
8

Es decir

  1. El número de parámetros con los que se ha llamado al script

  2. el número de parámetros que se han establecido en el script por set -- foo bar

  3. (cuando se usa dentro de una función) el número de parámetros con los que se ha llamado a una función ( settambién funcionaría allí).

Esto se explica en la página de manual de bash en el bloque "Parámetros especiales".

Hauke ​​Laging
fuente