Como encontro o número de argumentos passados ​​para um script Bash?


Respostas:



99
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0
for var in "$@"
do
    echo "The length of argument '$var' is: ${#var}"
    (( count++ ))
    (( accum += ${#var} ))
done
echo "The counted number of arguments is: $count"
echo "The accumulated length of all arguments is: $accum"

Também me ajudou, o que eu estava tentando fazer é; #! / bin / bash count = 0 soma = 0 avg = 0 para var em "$ @" do ((soma + = $ var)) ((contagem ++)) concluída ((avg = soma / $ contagem)) echo " soma dos números é: $ sum "echo" a média dos números é: $ avg ", o que me ajuda a obter números desconhecidos de argumentos e fazer algumas contas (você pode editar o operando) Obrigado por Dennis Williamson, eu fiz isso. Estou postando no código porque pode ser útil para alguém.
— kaan yılmaz 4/16

1
@ kaanyılmaz: O único problema com isso é que o Bash faz aritmética inteira. Se você quiser casas decimais, precisará usar AWK bc, ou outra coisa (ksh93 e zsh também podem fazer matemática decimal). Seu código inclui cifrões para algumas variáveis, mas não para outras. Você deve ser consistente em usá-los ou não. Por dentro, (())eles não são necessários. Eles estão, no entanto, nas echodeclarações.
— Pausado até novo aviso.

Eu não sou muito bom com linux, apenas modifiquei seu código conforme necessário. Basicamente, é o seu código
— kaan yılmaz

Obrigado pelo código, é muito bom.
— Smeterlink

12

para adicionar a referência original:

Você pode obter o número de argumentos do parâmetro especial $#. O valor 0 significa "sem argumentos". $#é somente leitura.

Quando usado em conjunto com o shiftprocessamento de argumentos, o parâmetro especial $#é decrementado cada vez que o Bash Builtin shifté executado.

consulte o Manual de referência do bash na seção 3.4.2 Parâmetros especiais :

  • "O shell trata vários parâmetros especialmente. Esses parâmetros só podem ser referenciados "

  • e nesta seção para a palavra-chave $ # "Expande para o número de parâmetros posicionais em decimal."


-1

Abaixo está o mais fácil -

cat countvariable.sh

echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'

Resultado :

#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8

3
Pode ser escrito comoecho "$@" | awk '{print NF}'
— user000001

-6

esse valor está contido na variável $#


4
Além do fato de há quase exatamente o mesmo (mas correto) resposta que é 4 anos de idade, sua resposta está errada - deve ser$#
— nachteil
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.