Как узнать количество аргументов, переданных скрипту 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
C-подобных языков, $#
будет, 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 Builtinshift
.
см. справочное руководство Bash в разделе 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
если присутствуют какие-либо аргументы.