Wie finde ich die Länge eines Arrays in der Shell?
Zum Beispiel:
arr=(1 2 3 4 5)
Und ich möchte seine Länge erhalten, die in diesem Fall 5 beträgt.
Wie finde ich die Länge eines Arrays in der Shell?
Zum Beispiel:
arr=(1 2 3 4 5)
Und ich möchte seine Länge erhalten, die in diesem Fall 5 beträgt.
Antworten:
$ a=(1 2 3 4)
$ echo ${#a[@]}
4
[*]
und [@]
beide "explodieren" Arrays in eine Token-Zeichenfolge, [@]
können jedoch Leerzeichen innerhalb von Token beibehalten . Beim Zählen von Elementen scheint dies jedoch keine Rolle zu spielen. arr=(foo "bar baz"); echo ${arr[*]}
druckt 2
nicht 3
.
[@]
auf dem Mac. GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
wenn jemand das gleiche Problem hat.
[@]
ist eine Funktion für Bash 4 und höher . Bash kann über Homebrew aktualisiert werden: itnext.io/upgrading-bash-on-macos-7138bd1066ba
[@]
es die Länge des ersten Elements für mich zurück (mit Bash 4.4.20 (1) -release).
Aus dem Bash- Handbuch :
$ {# Parameter}
Die Länge des erweiterten Werts des Parameters in Zeichen wird ersetzt. Wenn der Parameter ' ' oder '@' ist, ist der ersetzte Wert die Anzahl der Positionsparameter. Wenn der Parameter ein Array-Name ist, der durch ' ' oder '@' gekennzeichnet ist, ist der ersetzte Wert die Anzahl der Elemente im Array. Wenn parameter ein indizierter Array-Name ist, der durch eine negative Zahl gekennzeichnet ist, wird diese Zahl als relativ zu einem Wert interpretiert, der größer als der maximale Index des Parameters ist, sodass negative Indizes vom Ende des Arrays zurückzählen und ein Index von -1 auf den letzten verweist Element.
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
Ausgabe:
string length is: 10
array length is: 10
array length is: 10
hash length is: 3
hash length is: 3
$@
dem Argument Array:set arg1 arg2 "arg 3"
args_copy=("$@")
echo "number of args is: $#"
echo "number of args is: ${#@}"
echo "args_copy length is: ${#args_copy[@]}"
Ausgabe:
number of args is: 3
number of args is: 3
args_copy length is: 3
Angenommen, Bash:
~> declare -a foo
~> foo[0]="foo"
~> foo[1]="bar"
~> foo[2]="baz"
~> echo ${#foo[*]}
3
Erweitert ${#ARRAY[*]}
sich also auf die Länge des Arrays ARRAY
.
command not found
Fehler.
*
? Wie unterscheidet es sich von @
?
in tcsh oder csh:
~> set a = ( 1 2 3 4 5 )
~> echo $#a
5
In der Fischschale kann die Länge eines Arrays gefunden werden mit:
$ set a 1 2 3 4
$ count $a
4
count
in Unix einen Befehl gibt . Welches Betriebssystem verwenden Sie?
das funktioniert gut für mich
arglen=$#
argparam=$*
if [ $arglen -eq '3' ];
then
echo Valid Number of arguments
echo "Arguments are $*"
else
echo only four arguments are allowed
fi
Für diejenigen, die noch nach einer Möglichkeit suchen, die Länge eines Arrays in eine Variable zu setzen:
foo=$(echo ${'ARRAY[*]}
@
hier?