Сравнение нескольких строк в 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 на двух отдельных условиях.

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

  • поиск ipv6-адреса для MAC-адреса у соседей
  • Как захватить сообщение об ошибке из выполненной команды?
  • Замените строку в строке новой строкой (\ n) в Bash
  • Как получить первое слово строки?
  • Извлеките подстроку из значения переменной
  • bash найти строки, начинающиеся со строки
  • Извлечение строки до первой цифры в Bash
  • Используйте «find» из определенного относительного каталога
  • 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

    Как написать комбинацию сценариев Java / Shell, чтобы вы могли вызывать Java-программу как удаленную команду и все же поставлять локальный файл?

    Установка программного обеспечения без доступа пользователя root

    Настройка сервера freeRadius с функцией dhcp

    Время медленной загрузки XOrg

    Как сделать программу, которая будет реагировать на нажатие кнопки (например, «больше» на «q»)

    Как получить DisplayID для монитора?

    Grub не распознает окна 8

    Почему в Linux не был запущен механизм опроса сокетов в kqueue?

    Как клонировать удаленную систему Linux и сделать файл изображения с ним локально?

    Связь раскладки клавиатуры и xmodmap

    В Xorg, почему я теряю выделение текста в одном окне, когда я выбираю в другом окне?

    Удалите много файлов из папки

    Программно перенаправить аудиовыход конкретной программы в файл

    php ссылки на системный libxml вместо версии, указанной в ./configure –with-libxml-dir

    Buildroot OpenGL Capable Backend

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