O que $ # significa em shell?

25

O que $#significa com casca?

Eu tenho código como

if [ $# -eq 0 ]
then

Quero entender o que $#significa, mas a pesquisa no Google é muito ruim para pesquisar esse tipo de coisa.

BufBills
fonte
3
Para pesquisas com sinais de pontuação, eu gosto de usar symbolhound.com. Normalmente encontra o que eu preciso.
Eric Andres
você pode navegar no manual
miracle173
Para uma melhor referência e SEO: bang, sinal numérico , nítido, U + 0023, & # 35 ;, sinal de comentário e dólar!
Clément

Respostas:

37

Você sempre pode verificar a página de manual do seu shell. man bashdiz:

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

Portanto, um script de shell pode verificar quantos parâmetros são fornecidos com código como este:

if [ "$#" -eq 0 ]; then
  echo "you did not pass any parameter"
fi
michas
fonte
@NoName Você pode manquase tudo, inclusive manele próprio. Também tente aproposalgum tempo.
a CVn 31/03
@NoName, você também pode, ao usar um sistema operacional com ferramentas GNU (linux, etc) usar infoa página de manual ou informações adicionais (muito detalhadas e compartimentadas) se os pacotes tiverem alguma coisa
Olivier Dulac
12

Na realidade,

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

Tão juntos

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

Assim, você pode usar $#para verificar o número de argumentos / parâmetros passados ​​como você e lidar com qualquer situação inesperada.

Da mesma forma, temos

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

etc.

sivareddy963
fonte
8

Isso é

  1. o número de parâmetros com os quais o script foi chamado

  2. o número de parâmetros que foram definidos no script por set -- foo bar

  3. (quando usado em uma função) o número de parâmetros com os quais uma função foi chamada (set também funcionaria lá).

Isso é explicado na página de manual do bash no bloco "Parâmetros especiais".

Hauke ​​Laging
fonte