Bash
如何在匹配表達式中編寫正則表達式文字?
這個問題是關於在 bash 下的匹配表達式中編寫正則表達式文字的正確方法。
在 zsh 中,正如我所料,下面的匹配成功了:
% [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $? 0
在 bash 中並非如此:
$ [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $? 1
我知道這場比賽在 bash 中成功
$ ( regexp='^ [0-9]+ $'; [[ ' 123 ' =~ $regexp ]]; echo $? ) 0
…但它需要將正則表達式分配給中間變數。
我的問題是:如何在 bash 下的匹配表達式中編寫任意正則表達式文字?
按照 Bash 參考手冊3.2.4.2 Conditional Constructs的建議,最好將其放入變數中:
將正則表達式儲存在 shell 變數中通常是避免引用 shell 特殊字元問題的有用方法。有時很難在不使用引號的情況下從字面上指定正則表達式,或者在註意 shell 的引號刪除時跟踪正則表達式使用的引號。使用 shell 變數來儲存模式可以減少這些問題。
但是,為了直接在 bash 擴展測試中編寫它,您需要刪除引號並轉義空格:
$ [[ ' 123 ' =~ ^\ [0-9]+\ $ ]]; echo $? 0