Difference between revisions of "Bash =~"

From NovaOrdis Knowledge Base
Jump to: navigation, search
(TODO)
 
(One intermediate revision by the same user not shown)
Line 6: Line 6:
 
The string to the right of the = ̃ operator is considered an extended regular expression and matched against the string to the left of the operator. The rules governing the extended regular expression are described in regex(3).
 
The string to the right of the = ̃ operator is considered an extended regular expression and matched against the string to the left of the operator. The rules governing the extended regular expression are described in regex(3).
 
<syntaxhighlight lang='bash'>
 
<syntaxhighlight lang='bash'>
if [["string_to_be_matched_against_regex" =~ regex ]]; then
+
if [[ "string_to_be_matched_against_regex" =~ regex ]]; then
 
   # match  
 
   # match  
 
else
 
else
Line 19: Line 19:
 
<syntaxhighlight lang='bash'>
 
<syntaxhighlight lang='bash'>
 
if [["something" =~ ${regex}' ' ]]; then ...
 
if [["something" =~ ${regex}' ' ]]; then ...
 +
</syntaxhighlight>
 +
This also works:
 +
<syntaxhighlight lang='bash'>
 +
[[ "${output}" =~ "chart type".*"required" ]]
 
</syntaxhighlight>
 
</syntaxhighlight>
 
* Variable substitution works for both the string to be matched and the regular expression. When using a variable to specify the regular expression, do not enclose the variable in quotes, use it directly as in the example below:
 
* Variable substitution works for both the string to be matched and the regular expression. When using a variable to specify the regular expression, do not enclose the variable in quotes, use it directly as in the example below:

Latest revision as of 21:37, 10 October 2019

Internal

Overview

The string to the right of the = ̃ operator is considered an extended regular expression and matched against the string to the left of the operator. The rules governing the extended regular expression are described in regex(3).

if [[ "string_to_be_matched_against_regex" =~ regex ]]; then
  # match 
else
  # no match 
fi

Usage is subject to the following constraints:

  • The use of [[...]] is required.
  • DO NOT use double quotes when specifying the regular expression, just specify the regex literal directly.
  • If the regular expression contains spaces, use single quotes to denote space:
if [["something" =~ ${regex}' ' ]]; then ...

This also works:

[[ "${output}" =~ "chart type".*"required" ]]
  • Variable substitution works for both the string to be matched and the regular expression. When using a variable to specify the regular expression, do not enclose the variable in quotes, use it directly as in the example below:
if [[ "${var_containing_string_to_be_matched_against_regex}" =~ ${var_containing_regex} ]]; then ...
  • It matches [[:space:]]
  • If any part of the pattern is quoted, it is forcibly matched as a string.
  • The return value is 0 if the string matches the pattern, and 1 otherwise.
  • If the regular expression is syntactically incorrect, the conditional expression's return value is 2.
  • If the shell option nocasematch is enabled, the match is performed without regard to the case of alphabetic characters.
  • The =~ operator has the same precedence as == and !=.

Examples

A string that does not contain a slash:

if [[ ${something} =~ ^[^/]*$ ]]; then
   ...
fi

TODO

regex(3)