Як знайти кількість аргументів, переданих сценарію Bash?
Ось що я зараз маю:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Чи існують інші (кращі) способи цього?
Як знайти кількість аргументів, переданих сценарію Bash?
Ось що я зараз маю:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Чи існують інші (кращі) способи цього?
Відповіді:
Кількість аргументів є $#
Шукайте його на цій сторінці, щоб дізнатися більше: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argc
мов, подібних до С, $#
буде, 0
якщо до сценарію 1
не буде передано жодних аргументів, якщо є один аргумент тощо.
#!/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
або щось інше (ksh93 і zsh також можуть робити десяткову математику). Ваш код містить знаки долара для деяких змінних, але не для інших. Ви повинні бути послідовними щодо їх використання чи ні. Всередині (())
вони не потрібні. Однак вони є у echo
твердженнях.
щоб додати оригінал посилання:
Ви можете отримати кількість аргументів із спеціального параметра $#
. Значення 0 означає "немає аргументів". $#
є лише для читання
При використанні спільно з shift
для обробки аргументів спеціальний параметр $#
зменшується щоразу, коли Bash Builtin shift
виконується.
див. Довідковий посібник Баша в розділі 3.4.2 Спеціальні параметри :
"Оболонка спеціально обробляє декілька параметрів. На ці параметри можна посилатися лише "
і в цьому розділі для ключового слова $ # "Розширюється кількість позиційних параметрів у десятковій частині."
Нижче наведено найпростіший -
кішка countvariable.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
Вихід:
#./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
у змінній,i
якщо є якісь аргументи.