2015-04-10 2 views
0

Я пробовал разные варианты попыток добиться следующего, но я просто не могу.Bash Script Regex match не может избежать двойных кавычек

#!/bin/bash 

sb_command_passed=$* 
regexMatch="^find every file matching '(.*)' in this folder and subfolders" 
[[ $sb_command_passed =~ $regexMatch ]] 
param1=${BASH_REMATCH[1]} 
echo $param1 

Теперь, проходя следующие к сценарию:

find every file matching "search" in this folder and subfolders 

Это не возвращается поиска в качестве согласованного параметра. Если это удастся, я хотел бы передать регулярное выражение там:

find every file matching "\s.+[^&*]" in this folder and subfolders 

и получить \ с в ответ + [^ & *].. Можете ли вы мне помочь?

+0

Почему вы передаете строку '' находите каждый файл, соответствующий «\ s. + [^ & *]» В этой папке и вложенных папках «', а не только то, что вы * на самом деле хотите, - '' \ s. + [^ & *] "'? – Tomalak

+2

Просто удалите одинарные кавычки: 'regexMatch ="^найдите каждый файл, соответствующий (. *) В этой папке и подпапках "' – morgano

+0

@Tomalak хорошо, это на самом деле проблема, мне нужно передать все предложение в мой скрипт. – fineTuneFork

ответ

0

Похоже, вы просто имеете свои цитаты не так. Это работает:

$ regexMatch='^find every file matching "(.*)" in this folder and subfolders' 
$ sb_command_passed='find every file matching "\s.+[^&*]" in this folder and subfolders' 
$ [[ $sb_command_passed =~ $regexMatch ]] && echo "${BASH_REMATCH[1]}" 
\s.+[^&*] 

одиночные кавычки идут вокруг всей строки и двойные кавычки идут вокруг части, которую вы пытаетесь захватить.

+0

Могу ли я что-то сделать с двойными кавычками? Может быть, избежать последовательности? – fineTuneFork

+0

Вы имеете в виду, что хотите включить двойные кавычки в шаблон? –

+0

Да, это именно то, что я имею в виду. – fineTuneFork

Смежные вопросы