Para aclarar: a diferencia argcde los lenguajes tipo C, $#será 0si no se pasan argumentos al guión, 1si hay un 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"
También me ayudó, lo que estaba tratando de hacer es; #! / bin / bash count = 0 sum = 0 avg = 0 para var en "$ @" do ((sum + = $ var)) ((count ++)) done ((avg = sum / $ count)) echo " la suma de los números es: $ sum "echo" el promedio de los números es: $ avg "que me ayuda a obtener números desconocidos de args y hacer algunos cálculos (puede editar el operando) Gracias por Dennis Williamson, lo hice. Estoy publicando en el código porque puede ser útil para alguien.
kaan yılmaz
1
@ kaanyılmaz: El único problema con eso es que Bash solo hace aritmética de enteros. Si desea decimales, deberá usar AWK, bco alguna otra cosa (ksh93 y zsh también pueden hacer cálculos decimales). Su código incluye signos de dólar para algunas variables, pero no para otras. Debe ser coherente con su uso o no. Por dentro (())no son necesarios. Sin embargo, están en las echodeclaraciones.
Pausado hasta nuevo aviso.
No soy muy bueno con Linux, acabo de modificar su código como lo necesitaba. Es su código básicamente
kaan yılmaz
Gracias por el código, es muy bueno.
Smeterlink
12
para agregar la referencia original:
Puede obtener el número de argumentos del parámetro especial $#. El valor de 0 significa "sin argumentos". $#es de solo lectura.
Cuando se usa junto con el shiftprocesamiento de argumentos, el parámetro especial $#se reduce cada vez que shiftse ejecuta Bash Builtin .
i+1
en la variablei
si hay argumentos presentes.Respuestas:
El número de argumentos es
$#
Búscalo en esta página para obtener más información: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
fuente
argc
de los lenguajes tipo C,$#
será0
si no se pasan argumentos al guión,1
si hay un argumento, etc.fuente
bc
o alguna otra cosa (ksh93 y zsh también pueden hacer cálculos decimales). Su código incluye signos de dólar para algunas variables, pero no para otras. Debe ser coherente con su uso o no. Por dentro(())
no son necesarios. Sin embargo, están en lasecho
declaraciones.para agregar la referencia original:
Puede obtener el número de argumentos del parámetro especial
$#
. El valor de 0 significa "sin argumentos".$#
es de solo lectura.Cuando se usa junto con el
shift
procesamiento de argumentos, el parámetro especial$#
se reduce cada vez queshift
se ejecuta Bash Builtin .vea el Manual de referencia de Bash en la sección 3.4.2 Parámetros especiales :
"El shell trata varios parámetros especialmente. Estos parámetros solo pueden ser referenciados "
y en esta sección para la palabra clave $ # "Se expande al número de parámetros posicionales en decimal".
fuente
A continuación se muestra el fácil:
gato countvariable.sh
Salida:
fuente
echo "$@" | awk '{print NF}'
ese valor está contenido en la variable
$#
fuente
$#