Was bedeutet $ # in der Shell?


25

Was $#heißt in der Schale?

Ich habe Code wie

if [ $# -eq 0 ]
then

Ich möchte verstehen, was das $#bedeutet, aber die Google-Suche ist für die Suche nach solchen Dingen sehr schlecht.


3
Für Suchen mit Satzzeichen verwende ich gerne symbolhound.com. Findet meistens was ich brauche.
Eric Andres

Sie können das Handbuch
miracle173

Für eine bessere Referenzierung und SEO: Knall, Nummernzeichen , scharf, U + 0023 & # 35 ;, Kommentarzeichen und Dollar!
Clément

Antworten:


37

Sie können jederzeit die Manpage Ihrer Shell überprüfen. man bashsagt:

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

Daher kann ein Shell-Skript überprüfen, wie viele Parameter mit Code wie folgt angegeben werden:

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

@NoName Sie können manfast alles, auch sich manselbst. Probieren Sie auch aproposetwas Zeit.
ein Lebenslauf vom

@NoName können Sie auch, wenn Sie ein Betriebssystem mit GNU-Tools (Linux usw.) verwenden, infoentweder für die Manpage oder zusätzliche Informationen (sehr detailliert und unterteilt) verwenden, wenn die Pakete einige haben
Olivier Dulac

12

Tatsächlich,

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

Also zusammen

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

Auf diese Weise können Sie $#die Anzahl der übergebenen Argumente / Parameter überprüfen und unerwartete Situationen behandeln.

Ebenso haben wir

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

etc.


8

Das ist

  1. die Anzahl der Parameter, mit denen das Skript aufgerufen wurde

  2. die Anzahl der Parameter, die innerhalb des Skripts von eingestellt wurden set -- foo bar

  3. (bei Verwendung innerhalb einer Funktion) Die Anzahl der Parameter, mit denen eine Funktion aufgerufen wurde ( setwürde auch dort funktionieren).

Dies wird in der bash-Manpage im Block "Special Parameters" erläutert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.