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

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

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

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

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

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

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

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

 REMAINDER=$(( $NUM % 2 )) 

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

  • Шестнадцатеричная проверка последовательности чисел в Linux?
  • Как повторить нулевое заполненное целое число в bash?
  • Добавление чрезвычайно больших чисел в сценарий оболочки
  • ") Ошибка синтаксиса Недействительный арифметический оператор (маркер ошибки"
  • Перемещение подкаталога в новый родительский каталог, где новое имя каталога увеличивается на 1
  • Двоичные в шестнадцатеричные и десятичные в сценарии оболочки
  • Убедитесь, что $ REPLY находится в диапазоне номеров
  • Как создать сценарий 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 - лучшая ОС в мире.