Як знайти кількість аргументів, переданих сценарію 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якщо є якісь аргументи.