Как сделать точное совпадение слов для переменной в ksh? - PullRequest
2 голосов
/ 25 августа 2010

Я использовал следующий синтаксис как часть сценария ksh, чтобы проверить, существует ли слово Validation в LINE_FROM_FILE.

[[ "${LINE_FROM_FILE##*Validation}" != "${LINE_FROM_FILE}" ]] && print "match Validation"

Проблема этого синтаксиса в том, что он также соответствует словам типа Valid или ValidationVALID и т. Д., И моя цель состоит в том, чтобы точно соответствовать слову Validation в переменной $LINE_FROM_FILE.

Я спрашиваю, возможно ли также использовать синтаксис Perl в моем скрипте, чтобы точно соответствовать слову Validation, например:

[[ ` some perl command ` = Validation  ]] && print "match Validation"

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

Проверьте, содержит ли строка слово между символами, разделяющими слова.Полезный трюк заключается в добавлении разделительного слова в начале и в конце строки, если слово находится в начале или конце строки.

[[ " $LINE_FROM_FILE " == *[![:alnum:]]Validation[![:alnum:]]* ]]

Это предполагает, что слова состоят изтолько из букв и цифр.Отрегулируйте шаблон, если у вас есть другое определение.

Обратите внимание, что тест, который вы написали, [[ "${LINE_FROM_FILE##*Validation}" != "${LINE_FROM_FILE}" ]], представляет собой сложный способ записи [[ $LINE_FROM_FILE = *Validation* ]] (т. Е. Проверка на Validation в качестве подстроки).

0 голосов
/ 25 августа 2010

если вы используете bash, вам повезло:

регулярные выражения bash

Пример:

input=$1


if [[ "$input" =~ "[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]]
#                 ^ NOTE: Quoting not necessary, as of version 3.2 of Bash.
# NNN-NN-NNNN (where each N is a digit).
then
  echo "Social Security number."
  # Process SSN.
else
  echo "Not a Social Security number!"
  # Or, ask for corrected input.
fi
...