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

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

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

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

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

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

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

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

 REMAINDER=$(( $NUM % 2 )) 

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

  • Создавать списки номеров страниц для двухсторонней двусторонней печати: 2,3, ... и 1,4, ...
  • Какое обоснование оболочки bash не предупреждает вас об арифметическом переполнении и т. Д.?
  • Арифметическое расширение и расширение параметров
  • Что означает знак доллара, за которым стоит квадратная скобка в bash?
  • Инкрементный номер в строке переменной bash
  • case + как реализовать равный или меньше или больше в случае синтаксиса
  • bash: -eq vs. == и `bc` тип вывода
  • bash + как рассчитать очень длинные числа в bash?
  • 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 - лучшая ОС в мире.