Wyjaśnij: inaczej niż argcw językach podobnych do C, $#będzie, 0jeśli do skryptu nie zostaną przekazane żadne argumenty, 1jeśli jest jeden argument itp.
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"
Pomogło mi również, co starałem się zrobić; #! / bin / bash count = 0 sum = 0 avg = 0 for var in "$ @" do ((sum + = $ var)) ((count ++)) done ((avg = sum / $ count)) echo " suma liczb to: $ suma "echo" średnia liczb wynosi: $ avg ", co pomaga mi zdobyć nieznane liczby argumentów i zrobić matematykę (możesz edytować operand) Dzięki za Dennisa Williamsona, zrobiłem to. Wysyłam do kodu, ponieważ może być dla kogoś przydatny.
kaan yılmaz
1
@ kaanyılmaz: Jedynym problemem jest to, że Bash wykonuje tylko arytmetykę liczb całkowitych. Jeśli chcesz miejsc po przecinku, musisz użyć AWK bclub 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 echooświadczeniach.
Wstrzymano do odwołania.
Nie jestem zbyt dobry w Linuksie, właśnie zmodyfikowałem twój kod zgodnie z potrzebami. Zasadniczo jest to twój kod
kaan yılmaz
Dzięki za kod, jest bardzo dobry.
Smeterlink,
12
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 shiftprzetwarzaniem argumentów parametr specjalny $#jest zmniejszany za każdym razem, gdy shifturuchamiane jest wbudowane Bash .
i+1
w zmiennej,i
jeśli występują jakiekolwiek argumenty.Odpowiedzi:
Liczba argumentów wynosi
$#
Wyszukaj go na tej stronie, aby dowiedzieć się więcej: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
źródło
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.źródło
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 wecho
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, gdyshift
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”.
źródło
Poniżej jest łatwy -
cat countvariable.sh
Wynik :
źródło
echo "$@" | awk '{print NF}'
ta wartość jest zawarta w zmiennej
$#
źródło
$#