Я пытаюсь определить, содержит ли строка регулярное выражение в оболочке (bash
).
В частности, если он содержит цифру.
И пока это:
$ [[ string_with[6]indice =~ [0-9] ]] && echo "True" || echo "False"
работает как положено, когда я назначаю LHS и RHS переменным, происходит нечто странное:
$ STR=string_with[6]indice
$ REGEX=[0-9]
$ [[ string_with[6]indice =~ [0-9] ]] && echo "True" || echo "False"
False
Я хотел посмотреть, на что shell расходует мои переменные, и выяснил это:
$ STR=string_with[6]indice
+ STR='string_with[6]indice'
$ REGEX=[0-9]
+ REGEX='[0-9]'
$ [[ $STR =~ "$REGEX" ]] && echo "True" || echo "False"
+ [[ string_with[6]indice =~ \[0-9] ]]
+ echo False
False
Откуда это \
перед [0-9]
и почему оболочка автоматически экранирует первую скобку [
в REGEX
?