Сравнение нескольких строк в Bash

ROOTPATH="/path/here" p1 = "file1" p2 = "file2" for file in `find $ROOTPATH type f`; do if [["$file" =~ $p1]]; then echo 'got p1' elif [["$file" =~ $p2]]; then echo 'got p1' else echo 'got nothing' 

Это не удается, и я не уверен, почему. И $p1 и $p2 – это строки, а также файл.

Я пытаюсь выполнить сравнение по (2) строкам, чтобы увидеть, существуют ли $p1 или p2 в $file на двух отдельных условиях.

Что я делаю не так?

  • Как захватить сообщение об ошибке из выполненной команды?
  • Как использовать команду «date» для отображения номера недели в году?
  • подстановка параметров оболочки для переименования файлов
  • Как передать строки из файла в сценарий bash, чтобы каждая строка оставалась неразделенной, даже если есть пробелы?
  • Почему цитаты сохраняются в строковых переменных, когда они окружены одинарными кавычками?
  • Проверьте, имеет ли содержимое файла длину X и содержит только определенные символы
  • Замена шаблона строкой
  • Удалить последние n символов из -print0?
  • 2 Solutions collect form web for “Сравнение нескольких строк в Bash”

    Вам не нужен требуемый синтаксис для использования поискового поиска «by-type» оператора find :

     for file in $(find "$ROOTPATH" -type f); do 

    Ваше присваивание переменных p1 и p2 синтаксически неверно:

     p1="file1" # Assigns the value 'file1' to the variable p1 p1 = "file1" # Attempts to execute `p1` with arguments '=' and 'file1' 

    Кроме того, два выражения echo идентичны, вы можете изменить команду echo второго дела, в зависимости от вашего варианта использования.

    Кроме того, синтаксис ваших операторов if ошибочен; символ пробела или разделитель команд требуется как до, так и после токенов [[ и ]] .

    Просто исправление синтаксиса

     ROOTPATH="/path/here" p1="file1" p2="file2" for file in `find $ROOTPATH -type f`; do if [[ $file =~ $p1 ]]; then echo "got p1" elif [[ $file =~ $p2 ]]; then echo "got p2" else echo "got nothing" fi done 

    Договоренность

    • Удаление пробелов в присваивании переменных
    • вместо type
    • Удалено " в переменном $file из-за [[ использование
    • Добавлено пространство ( [[ $file & p1 ]] )
    • Добавление окончаний fi & done

    Как отмечалось в комментариях, обратите внимание на цикл с командой find .

    Interesting Posts

    Как собрать достойное ядро ​​из kernel.org?

    заменяя многострочную строку другой многострочной строкой, используя sed

    Каталог скелетов – как добавить мои собственные каталоги

    Рекурсивное сравнение и удаление (без rsync или хеширования)

    Переименовывать файлы на основе их родительского каталога с помощью команды find / xargs?

    Есть ли способ выйти из режима «меньше», не останавливая другие процессы в трубе?

    Ошибка при записи DVD

    Как работает следующий сценарий оболочки для поиска всех файлов размером более 20 МБ?

    Невозможно выполнить резервное копирование данных на DVD

    Манипуляция клавишей X и указателем захватывается в командной строке

    Как Debian использует множество процессорных ядер?

    Поиск файла, начинающегося с '-' тире

    Увеличьте пространство виртуального жесткого диска на VMWare для Ubuntu

    Какие плохие вещи могут произойти, если мы не будем использовать sudoedit?

    Bluetooth-соединение вешает систему в debian

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