2017-03-16 22 views
5

Tôi có một đoạn đường đi để kiểm tra biến env cassadra_version.travis-ci regex trên travis_tag không được giải quyết

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

Tôi muốn cho cũng chỉ chạy nếu không có thẻ gọi triển khai.

Tôi đã thử: if [ ! -z ${CASSANDRA_VERSION} ] && [ "${TRAVIS_TAG}" =~ '^((?!deploy).)*$' ]; then ./setup-cassandra.sh; fi;

nhưng nó mang lại cho tôi một lỗi điều hành nhị phân

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

cũng mang lại cho tôi một lỗi

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

cũng có.

thì tôi cũng đã thử chỉ: nếu [$ {TRAVIS_TAG} = ~ '^ (((triển khai ?!).) * $']; sau đó ./setup-cassandra.sh; fi; `

nó cũng cho tôi toán tử nhị phân.

Tôi không thực hiện đúng regex?

Trả lời

5

Bạn không ở xa, vấn đề chính của bạn là ~= không phải là toán tử thử nghiệm phổ dụng, nhưng là một toán tử cụ thể bash. Để sử dụng các toán tử thử nghiệm nâng cao bash này, bạn phải sử dụng dấu ngoặc kép.

này sẽ làm việc:

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

Vâng, nếu regexp của bạn là đúng;)

Để biết thêm về các nhà khai thác được cải thiện: http://mywiki.wooledge.org/BashFAQ/031

+0

nó đang nói: [[: lệnh không tìm thấy – azngunit81

+1

Lỗi của tôi! ** Bash ** (và đó là những gì bực mình với nó) rất hợp lý đối với khoảng trống ... Tôi đã cố gắng thực hiện một hiệu ứng đặc biệt trong câu trả lời của tôi để đặt dấu ngoặc vào chữ in đậm ... Nhưng khoảng trắng giữa các dấu ngoặc và văn bản không tồn tại cho một bản sao/dán ... Tôi đã chỉnh sửa câu trả lời của mình, bây giờ bạn sẽ có thể sao chép dòng đó. – arvymetal

Các vấn đề liên quan