2017-03-16 102 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