Арифметическая синтаксическая ошибка с числовой переменной

У меня возникают трудности с арифметической синтаксической ошибкой.

Я читаю имя текстовых файлов из командной строки и подсчитываю количество строк каждого файла.

NUM=$(wc -l "$text") 

а затем я хочу проверить, является ли NUM нечетным или нет.

Поэтому я положил,

 REMAINDER=$(( $NUM % 2 )) if [ $REMAINDER -ne 0 ] ; then echo "Odd number" fi 

Однако, похоже, что существует проблема с

 REMAINDER=$(( $NUM % 2 )) 

$ NUM, похоже, не рассматривается как число, а файл .txt. Когда я проверил NUM сам по себе, и он отлично работал …

  • Используя арифметическое расширение bash «double paren», математика выходит из строя с начальным нулем
  • Что не так в создании / печати этого массива?
  • Shell отключается при арифметическом выражении в цикле
  • Убедитесь, что $ REPLY находится в диапазоне номеров
  • Двоичные в шестнадцатеричные и десятичные в сценарии оболочки
  • Арифметическое расширение Shell с котировками
  • Найдите «умеренно большой» делитель заданного числа?
  • Что делает оператор запятой в арифметике Баша?
  • One Solution collect form web for “Арифметическая синтаксическая ошибка с числовой переменной”

    Если вы печатаете $NUM , после

     NUM=$(wc -l "$text") 

    вы, вероятно, увидите (в Linux) номер и имя файла в одной строке с некоторыми пробелами.

    Например:

     1842 basic.c 

    Эта строка не является числом, и вы обычно читаете только первый токен с вашим выбором shell / sed / awk и т. Д., Чтобы использовать это как число.

    @steeldriver предлагает это для получения только числа:

     NUM=$(wc -l < "$text") 

    который работает (протестирован с Debian).

    Linux и Unix - лучшая ОС в мире.