Проверьте количество аргументов, переданных в bash от чтения - PullRequest
3 голосов
/ 29 марта 2020

У меня есть вопрос о проверке ввода пользователем количества аргументов, переданных пользователем в сценарии bash. Например, если я использую:

if [[ $# -eq 2 ]]
then...

, это будет проверять, были ли переданы 2 аргумента из командной строки, например:

./somescript.sh arg1 arg2

, но как проверить, если пользователь передал 2 аргумента при запросе ? Например:

echo "Type 2 names:"
read...
if [[ user passed more || less than 2 arguments]]
   echo "incorrect number of names"

Теперь, если я попытаюсь использовать $# -eq 2, это не сработает.

Как правильно это сделать?

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

Использовать массив:

read -r -a array
if [[ "${#array[@]}" -eq 2 ]]; then ...

См. Вывод:

declare -p array
2 голосов
/ 29 марта 2020

В качестве альтернативы, если ваша оболочка не имеет массива, подобного оболочке k sh или POSIX, вы можете заполнить аргументы из переменной чтения следующим образом:

read -r reply
set -f # Disable globbing
set -- $reply # without quotes
if [ $# -eq 2 ]; then
...