Que signifie $ # dans le shell?

25

Que $#signifie shell?

J'ai un code tel que

if [ $# -eq 0 ]
then

Je veux comprendre ce que cela $#signifie, mais la recherche Google est très mauvaise pour rechercher ce genre de choses.

BufBills
la source
3
Pour les recherches avec des signes de ponctuation, j'aime utiliser symbolhound.com. Trouve généralement ce dont j'ai besoin.
Eric Andres
vous pouvez parcourir le manuel
miracle173
Pour un meilleur référencement et référencement: bang, signe numérique , sharp, U + 0023, & # 35 ;, signe de commentaire et dollar!
Clément

Réponses:

37

Vous pouvez toujours consulter la page de manuel de votre shell. man bashdit:

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

Par conséquent, un script shell peut vérifier combien de paramètres sont donnés avec du code comme celui-ci:

if [ "$#" -eq 0 ]; then
  echo "you did not pass any parameter"
fi
michas
la source
@NoName Vous pouvez manpresque tout, y compris manlui-même. Essayez également un apropospeu de temps.
un CVn
@NoName vous pouvez également, lorsque vous utilisez un système d'exploitation avec des outils GNU (linux, etc.), utiliser infosoit pour la page de manuel, soit des informations supplémentaires (très détaillées et compartimentées) si les packages en contiennent
Olivier Dulac
12

Réellement,

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

Alors ensemble

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

Ainsi, vous pouvez utiliser $#pour vérifier le nombre d'arguments / paramètres passés comme vous l'avez fait et gérer toutes les situations inattendues.

De même, nous avons

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

etc.

sivareddy963
la source
8

C'est

  1. le nombre de paramètres avec lesquels le script a été appelé

  2. le nombre de paramètres définis dans le script par set -- foo bar

  3. (lorsqu'il est utilisé dans une fonction) le nombre de paramètres avec lesquels une fonction a été appelée ( setfonctionnerait là aussi).

Ceci est expliqué dans la page de manuel bash du bloc "Paramètres spéciaux".

Hauke ​​Laging
la source