¿Cómo encuentro el número de argumentos pasados a un script Bash?
Esto es lo que tengo actualmente:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
¿Hay otras (mejores) formas de hacer esto?
¿Cómo encuentro el número de argumentos pasados a un script Bash?
Esto es lo que tengo actualmente:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
¿Hay otras (mejores) formas de hacer esto?
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
argc
de los lenguajes tipo C, $#
será 0
si no se pasan argumentos al guión, 1
si hay un argumento, etc.
#!/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"
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 las echo
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 que shift
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".
A continuación se muestra el fácil:
gato countvariable.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
Salida:
#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8
echo "$@" | awk '{print NF}'
i+1
en la variablei
si hay argumentos presentes.