Todos estes são equivalentes:
[ $(vagrant --version > /dev/null) ]
[]
test
shells não são como outras linguagens de programação. Eles possuem 2 saídas: o valor de retorno e stdout. Você está passando o stdout para test
, mas stdout é a string vazia, já que foi redirecionada.
O que você estava procurando é.
[ $(vagrant --version > /dev/null; echo $? ) ]
No entanto, [ 0 ]
e [ 1 ]
etc retornam true porque [ … ]
com uma única palavra dentro testa se a palavra não está vazia.
Então você precisa de
[ $(vagrant --version > /dev/null; echo $? ) = 0 ]
ou mais simplesmente
vagrant --version > /dev/null