Jak znaleźć liczbę argumentów przekazanych do skryptu Bash?
Oto co mam obecnie:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Czy istnieją inne (lepsze) sposoby na zrobienie tego?
Jak znaleźć liczbę argumentów przekazanych do skryptu Bash?
Oto co mam obecnie:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Czy istnieją inne (lepsze) sposoby na zrobienie tego?
Odpowiedzi:
Liczba argumentów wynosi $#
Wyszukaj go na tej stronie, aby dowiedzieć się więcej: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argc
w językach podobnych do C, $#
będzie, 0
jeśli do skryptu nie zostaną przekazane żadne argumenty, 1
jeśli jest jeden argument itp.
#!/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
lub czegoś innego (ksh93 i zsh mogą również wykonywać obliczenia dziesiętne). Twój kod zawiera znaki dolara dla niektórych zmiennych, ale nie dla innych. Powinieneś być konsekwentny w korzystaniu z nich, czy nie. Wewnątrz (())
nie są konieczne. Są jednak w echo
oświadczeniach.
aby dodać oryginalne odniesienie:
Możesz uzyskać liczbę argumentów ze specjalnego parametru $#
. Wartość 0 oznacza „brak argumentów”. $#
jest tylko do odczytu.
W połączeniu z shift
przetwarzaniem argumentów parametr specjalny $#
jest zmniejszany za każdym razem, gdy shift
uruchamiane jest wbudowane Bash .
patrz Podręcznik referencyjny Bash w rozdziale 3.4.2 Parametry specjalne :
„Powłoka traktuje kilka parametrów specjalnie. Do tych parametrów można się jedynie odnosić ”
oraz w tej sekcji dla słowa kluczowego $ # „rozwija się do liczby parametrów pozycyjnych w systemie dziesiętnym”.
Poniżej jest łatwy -
cat countvariable.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
Wynik :
#./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
w zmiennej,i
jeśli występują jakiekolwiek argumenty.