Как включить переменную в подстановку команды ksh? - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь найти количество строк, которые соответствуют шаблону регулярного выражения в grep, полученном как переменная.Когда я делаю grep с шаблоном непосредственно в подстановке команд, это работает.Когда я использую переменную для шаблона, это не так.

#!/bin/bash

pattern="'^\\\".*\\\"$'"
echo "pattern : $(echo $pattern)"
NB=$(grep -c -E -v -e ${pattern} abc.txt)
NB2=$(grep -v -c -E -e '^\".*\"$' abc.txt)
echo " -> $NB , $NB2"

Кроме того, что в коде, я пробовал:

NB=$(grep -c -E -v -e $(echo $pattern) abc.txt)

Нет успеха.

cmd="grep -c -E -v -e ${pattern} abc.txt"
NB="$($cmd)"

Безуспешно.

В этом примере файл abc.txt содержит 3 строки:

"abc"
"abc
abc"

Шаблон в переменной выглядит нормально:

pattern : '^\".*\"$'

Я ожидаю, что 2 числа в NB и NB2 одинаковы.Если вы посмотрите в коде, фактический результат:

pattern : '^\".*\"$'
 -> 3 , 2

Я ожидаю:

pattern : '^\".*\"$'
 -> 2 , 2

1 Ответ

1 голос
/ 03 апреля 2019
NB2=$(grep -v -c -E -e '^\".*\"$' abc.txt)

Если это работает, тогда присвойте это точное регулярное выражение $pattern. Не добавляйте больше обратной косой черты и кавычек.

pattern='^\".*\"$'

Всегда полезно заключать в кавычки расширения переменных, чтобы избежать нежелательного подстановочного знака и разделения слов.

NB=$(grep -c -E -v -e "${pattern}" abc.txt)
#                     ^          ^
...