Bash
為什麼 bash 中的正則表達式僅在它是變數而不是直接的情況下才有效?
那麼為什麼以下工作,即列印出比賽:
THE_REGEX='^test\/version[0-9]+([.][0-9]+)+$' if [[ "$SOME_VAR" =~ $THE_REGEX ]]; then echo "Match!" fi
但以下不是:
if [[ "$SOME_VAR" =~ '^test\/version[0-9]+([.][0-9]+)+$' ]]; then echo "Match!" fi
有什麼不同?這是同一個正則表達式
不要在裡面使用單引號
[[
:if [[ "$SOME_VAR" =~ ^test\/version[0-9]+([.][0-9]+)+$ ]]; then echo "Match!" fi
來自 GNU bash 手冊: https ://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs
特別注意:
可以引用模式的任何部分以強制將引用的部分匹配為字元串。
該手冊似乎建議首選使用該變數:
將正則表達式儲存在 shell 變數中通常是避免引用 shell 特殊字元問題的有用方法。有時很難在不使用引號的情況下從字面上指定正則表達式,或者在註意 shell 的引號刪除時跟踪正則表達式使用的引號。使用 shell 變數來儲存模式可以減少這些問題。