Para esclarecer: ao contrário argcem C-como idiomas, $#será 0se não houver argumentos passados para o script, 1se há um argumento, etc.
Vladimir Panteleev
99
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0for 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.
i+1
na variáveli
se houver algum argumento presente.Respostas:
O número de argumentos é
$#
Pesquise nesta página para saber mais: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
fonte
argc
em C-como idiomas,$#
será0
se não houver argumentos passados para o script,1
se há um argumento, etc.fonte
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, nasecho
declarações.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
shift
processamento de argumentos, o parâmetro especial$#
é decrementado cada vez que o Bash Builtinshift
é 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."
fonte
Abaixo está o mais fácil -
cat countvariable.sh
Resultado :
fonte
echo "$@" | awk '{print NF}'
esse valor está contido na variável
$#
fonte
$#