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

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

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 .

  • Преобразование MAC-адреса в локальный адрес ссылки с помощью bash
  • Вывод переменной не объединяется
  • Как преобразовать пунктирную строку в пробелы и кепки?
  • строки отсутствуют после конкатенирования двух или более переменных строк в bash
  • Проверьте, имеет ли строка период с ним с bash
  • Bash в пространстве с двойными скобками, используя оператор «~ =»
  • Копировать процесс вывода нескольких строк в файл
  • Bash while loop читает из списка путей, разделенных двоеточиями, используя IFS
  • Как получить строку между двумя специальными символами с помощью Shell?
  • имя файла без пробелов из двух команд
  • Удалить часть пути из переменной содержимого
  • Печатать линию со смещением X в дампе памяти +/- 10 строк с каждой стороны
  • Linux и Unix - лучшая ОС в мире.