O uso do pipe permite que os comandos sejam executados em subshells diferentes, portanto, você recebe a mensagem de erro, pois os dois comandos ( [
e grep
) estão incompletos (os respectivos não funcionam como esperado).
Se você quiser apenas testar o código de resultado de um programa, não precisará usar [ … ]
ou test
, você precisará deles apenas para uma comparação mais distinta, como [ 1 -gt 2 ]
ou [ "$1" == "$2" ]
.
Se você quiser comparações ainda mais avançadas, como o uso de expressões regulares, use o comando [[ … ]]
, consulte Construções de Teste
e Uma breve introdução às expressões regulares no 'Guia avançado de script de script'