2016-09-06 16 views
0

上CLI本身下面的命令作品。爲什麼下面的正則表達式在cli上工作,但不是來自bash腳本?</p> <pre><code>someCall prefix.+([[:digit:]]).postfix </code></pre> <p>但不是在bash腳本:

這個想法是,我想給名字如prefix.1.postfixprefix.112.postfix的文件給程序。

我必須在腳本中更改哪些內容?

編輯: 忘了提到它拋出的錯誤:

syntax error near unexpected token `(' 

編輯2: 如果我source myScript.sh源bash腳本,然後它工作: - \

回答

1

您似乎在混淆shell匹配和正則表達式匹配。這些是不同的東西,並使用不同的元字符。

正如正則表達式+量詞所做的那樣,(標準POSIX)無法表達「一個或多個」。

但是,你可以嘗試,如果這是足夠的選擇性:

$ touch prefix.1.postfix 
$ echo prefix.[[:digit:]]*.postfix 
prefix.1.postfix 
+0

哦,對不起,我的措辭是那麼錯誤。所以它被稱爲globbing。謝謝。 – Michael

+0

我還沒有得到:現在初始問題中的命令有效(請參閱編輯2)。那麼這是現在通配符還是正則表達式? – Michael

+0

@Michael如果shell使用它進行路徑名擴展,它就是globbing;它是用作grep,egrep或其他正則表達式實用程序的參數時的正則表達式。如果我運行一個類似'echo foo(bar)baz'的命令,則在提示符處以及使用該行源文件時,都會收到語法錯誤。有些東西你沒有告訴我們。 – Jens

1

+([[:digit:]])和後逃逸.

^prefix\.([[:digit:]])+\.postfix$ 

此外,如果你不需要捕獲的數字組,請執行以下操作:

^prefix\.[[:digit:]]+\.postfix$ 
+0

沒有幫助,還讓我在這個問題提到的錯誤(SRY,忘記了最初) – Michael

相關問題