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.