Что делает оператор "= ~" в сценариях оболочки?
Кажется, что это своего рода оператор сравнения, но что именно он делает в частности. следующий код (взятый из https://github.com/lvv/git-prompt/blob/master/git-prompt.sh#L154)?
if [[ $LC_CTYPE =~ "UTF" && $TERM != "linux" ]]; then
elipses_marker="…"
else
elipses_marker="..."
fi
В настоящее время я пытаюсь сделать git-prompt
для работы в MinGW, и оболочка, поставляемая с MinGW, похоже, не поддерживает этот оператор:
conditional binary operator expected
syntax error near `=~'
` if [[ $LC_CTYPE =~ "UTF" && $TERM != "linux" ]]; then'
В этом конкретном случае я могу просто заменить весь блок на elipses_marker="…"
(поскольку я знаю, что мой терминал поддерживает unicode), но что именно делает это =~
?
Ответы
Ответ 1
Это a bash - только дополнение к встроенной команде [[
, выполняющее регулярное выражение. Поскольку это не обязательно точное совпадение полной строки, символ размахивается, указывая на неточное совпадение.
В этом случае, если $LC_CTYPE
СОДЕРЖИТ строку "UTF".
Более портативная версия:
if test `echo $LC_CTYPE | grep -c UTF` -ne 0 -a "$TERM" != "linux"
then
...
else
...
fi
Ответ 2
Это регулярное выражение. Я предполагаю, что ваша версия bash пока не поддерживает.
В этом конкретном случае я бы предложил заменить его более простым (и более быстрым) сопоставлением шаблонов:
[[ $LC_CTYPE == *UTF* && $TERM != "linux" ]]
(обратите внимание, что *
не следует указывать здесь)
Ответ 3
Подобно Ruby, он соответствует тому, где операнд RHS является регулярным выражением.
Ответ 4
Он соответствует регулярным выражениям
Обратитесь к следующему примеру из http://tldp.org/LDP/abs/html/bashver3.html#REGEXMATCHREF
#!/bin/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