Comment trouver la longueur du tableau dans le shell Unix?
$$ a=(1 2 3 4)
$$ echo ${#a[@]}
4
En supposant que bash:
~> declare -a foo
~> foo[0]="foo"
~> foo[1]="bar"
~> foo[2]="baz"
~> echo ${#foo[*]}
3
Alors, ${#ARRAY[*]}
s'étend à la longueur du tableau ARRAY
.
De Bash manuel :
$ {# paramètre}
La longueur en caractères de la valeur développée du paramètre est remplacée. Si le paramètre est ‘’ ou ‘@’, la valeur substituée est le nombre de paramètres positionnels. Si le paramètre est un nom de tableau indexé par "" ou "@", la valeur substituée est le nombre d'éléments dans le tableau. Si le paramètre est un nom de tableau indexé indexé par un nombre négatif, ce nombre est interprété comme relatif à un supérieur à l'index maximum du paramètre, donc les indices négatifs comptent à rebours à partir de la fin du tableau, et un index de -1 fait référence au dernier élément.
string="0123456789" # create a string of 10 characters
array=(0 1 2 3 4 5 6 7 8 9) # create an indexed array of 10 elements
declare -A hash
hash=([one]=1 [two]=2 [three]=3) # create an associative array of 3 elements
echo "string length is: ${#string}" # length of string
echo "array length is: ${#array[@]}" # length of array using @ as the index
echo "array length is: ${#array[*]}" # length of array using * as the index
echo "hash length is: ${#hash[@]}" # length of array using @ as the index
echo "hash length is: ${#hash[*]}" # length of array using * as the index
sortie:
string length is: 10
array length is: 10
array length is: 10
hash length is: 3
hash length is: 3
$@
, le tableau d'arguments:set arg1 arg2 "arg 3"
args_copy=("$@")
echo "number of args is: $#"
echo "number of args is: ${#@}"
echo "args_copy length is: ${#args_copy[@]}"
sortie:
number of args is: 3
number of args is: 3
args_copy length is: 3
en tcsh ou csh:
~> set a = ( 1 2 3 4 5 )
~> echo $#a
5
Dans le Fish Shell la longueur d'un tableau peut être trouvée avec:
$ set a 1 2 3 4
$ count $a
4
cela fonctionne bien pour moi
arglen=$#
argparam=$*
if [ $arglen -eq '3' ];
then
echo Valid Number of arguments
echo "Arguments are $*"
else
echo only four arguments are allowed
fi