2017-03-16 101 views
5

我有一段travis它檢查cassadra_version env變量。travis_c正則表達式travis_tag不解決

if [ ! -z ${CASSANDRA_VERSION} ]; then ./setup-cassandra.sh; fi;

我想因爲如果沒有標籤叫部署也只運行。

我曾嘗試: if [ ! -z ${CASSANDRA_VERSION} ] && [ "${TRAVIS_TAG}" =~ '^((?!deploy).)*$' ]; then ./setup-cassandra.sh; fi;

,但它給了我一個二元運算錯誤

if [ [! -z ${CASSANDRA_VERSION} ] && [ "${TRAVIS_TAG}" =~ '^((?!deploy).)*$' ]]; then ./setup-cassandra.sh; fi;

也給我一個錯誤

if [ [! -z ${CASSANDRA_VERSION} ] && [ ${TRAVIS_TAG} =~ '^((?!deploy).)*$' ]]; then ./setup-cassandra.sh; fi;

也。如果[$ {TRAVIS_TAG} =〜'^((?!deploy)。)* $'];然後,我嘗試了: 。那麼./setup-cassandra.sh; fi;`

它也給了我二進制運算符。

我沒有正確地執行正則表達式嗎?

回答

5

你不是很遠,你的主要問題是~=不是一個通用測試操作符,而是一個bash特定的一個。 要使用這些bash高級測試操作員,您必須使用雙括號

這將工作:

if [ ! -z ${CASSANDRA_VERSION} ] && [[ "${TRAVIS_TAG}" =~ ^((?!deploy).)*$ ]]; then ./setup-cassandra.sh; fi;

好吧,如果你的正則表達式是正確的;)

爲了更多地瞭解這些改進的運營商:http://mywiki.wooledge.org/BashFAQ/031

+0

跟它:[[:命令找不到 – azngunit81

+1

我的錯! ** Bash **(這是什麼令人沮喪)是非常明智whitespaces ... 我試圖做一個特殊的效果,在我的答案把方括號用粗體表示......但方括號和文本不會生存到一個複製/粘貼... 我編輯了我的答案,現在你應該能夠複製該行。 – arvymetal