[ -d ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-*-backup ];
O *
sem aspas aqui será expandido para qualquer nome de arquivo correspondente
$ mkdir test-master-123-backup test-master-456-backup
$ a=test b=master
$ echo $a-$b-*-backup
test-master-123-backup test-master-456-backup
Portanto, [
obtém mais argumentos do que o esperado para -d
. Ele provavelmente recebe três no total ( -d
e nomes de arquivos), pois esse é o caso em que ele espera que o intermediário seja um operador binário, como sugere a mensagem de erro.
A versão em que o *
é citado não deve dar o mesmo erro, em vez disso, ele procurará um arquivo com um literal *
no nome, o que provavelmente não é o que você deseja.
Se você quiser ver se há diretórios correspondentes a esse padrão, você pode fazer algo assim:
any=0
# set IFS to empty if you expect to have directories with whitespace in names
# IFS=''
for f in $a-$b-*-backup; do
if [ -d "$f" ]; then
any=1
fi
done
if [ "$any" = 1 ]; then
echo "some directories matching $a-$b-*-backup were found"
fi
Ou, de uma maneira um pouco mais simples no Bash. A barra à direita faz com que os glob correspondam apenas aos diretórios, e nullglob
faz com que o glob se transforme em uma lista vazia se não corresponder a nada:
IFS=''
shopt -s nullglob
set -- $a-$b-*-backup/
if [ "$#" != 0 ]; then
echo "$# directories matching $a-$b-*-backup were found"
fi