Regex соответствует строке с пробелами (используйте кавычки?) В выражении if

Как мне выполнить регулярное выражение, как показано ниже, но с кавычками вокруг ( "^ This" ), как в реальном мире. "This" будет строкой, в которой могут быть пробелы.

#!/bin/bash

text="This is just a test string"
if [[ "$text" =~ ^This ]]; then
 echo "matched"

else
 echo "not matched"
fi

Я хочу сделать что-то вроде

    if [[ "$text" =~ "^This is" ]]; then

но это не соответствует.

Ответы

Ответ 1

Вы можете использовать \ перед пробелами.

#!/bin/bash

text="This is just a test string"
if [[ "$text" =~ ^This\ is\ just ]]; then
  echo "matched"
else
  echo "not matched"
fi

Ответ 2

Мне не удалось встроить выражение следующим образом:

if [[ "$text" =~ "^ *This " ]]; then

но если вы поместите выражение в переменную, вы можете использовать обычный синтаксис regex, например:

pat="^ *This "
if [[ $text =~ $pat ]]; then

Обратите внимание, что цитирование на $text и $pat непрозрачно.

Edit: Удобный oneliner во время разработки:

pat="^ *This is "; [[ "   This is just a test string" =~ $pat ]]; echo $?

Ответ 3

Можете ли вы сделать описание проблемы более понятным?

text="This is just a test string"
case "$text" in
    "This is"*) echo "match";;
esac

выше предполагалось, что вы хотите совместить "Это" при точном начале строки.

Ответ 4

Вы пробовали:

^[\s]*This