Bash: ожидается операнд синтаксической ошибки "=" в операторе присваивания в цикле for - PullRequest
0 голосов
/ 10 апреля 2020

РЕДАКТИРОВАТЬ : Я думаю, что он не выбирает $ 1 в качестве операнда. Я пытался сохранить его в переменной, затем пытался назначить, но, похоже, это не имеет никакого эффекта.

EDIT 2 : предоставил минимальный воспроизводимый скрипт в соответствии с запросом.

Часть кода, генерирующая ошибки, выглядит следующим образом:

check() {
if [ $1 -lt $2 ]; then
 for((var=$1; var<$2; var++)); do
  if [ $((var%2)) -eq 0 ]; then
   echo "it's an even number"
   fi
  done
fi
}

if [ $# -eq 2 ]; then 
check
fi

Остальная часть кода функции будет прикреплена ниже. Функция довольно длинная для повторного ввода; Я использую Ubuntu через виртуальную машину, которая не позволяет копировать или вставлять элементы из виртуальной машины, но это может быть просто настройкой.

часть 1 функции

часть 2 функции

1 Ответ

1 голос
/ 10 апреля 2020

Вы вызываете свою функцию с помощью

check

, то есть вы не передаете никаких параметров, следовательно, $ 1 и $ 2 пусты, поэтому это не может работать. Вам нужно будет написать

check "$@"

или

check "$1" "$2"

в зависимости от того, чего именно вы хотите достичь.

Однако с вашим исходным кодом вы должны получить для вашего оператора if сообщение об ошибке

[: -lt: unary operator expected

ОБНОВЛЕНИЕ : Как отметил в своем комментарии GordonDavisson, вы не получите эту синтаксическую ошибку здесь, поскольку оба операнда отсутствуют в ваш случай и -lt теряет смысл в качестве оператора.

Кстати, если бы вы написали тест как

if (( $1 < $2 )); then

, вы бы получили синтаксическую ошибку (bash: ((: <: синтаксическая ошибка: ожидается операнд (маркер ошибки "<") </em>)

...