Sempre fico surpreso que na pasta /bin
exista um [
programa.
É assim que se chama quando estamos fazendo algo como if [ something ]
:?
Ao chamar o [
programa explicitamente em um shell, ele solicita uma correspondência ]
e, quando eu forneço o colchete de fechamento, ele parece não fazer nada, não importa o que eu insira entre os colchetes.
Desnecessário dizer que a maneira usual de obter ajuda sobre um programa não funciona, ou seja, man [
nem [ --help
funciona.
man '['
funciona bem para mim - ou você esqueceu de citar [
ou tem uma definição diferente de "funciona".
[
avalia seus argumentos, portanto, você precisa ter espaços entre todos eles. [ a=b ]
não é uma comparação: sempre será verdadeira (é uma única sequência: "a = b", que é sempre avaliada como verdadeira ) E você deve limitar o número de argumentos a 4 (mesmo que implementações recentes permitam mais .. por exemplo, limita a 4, por exemplo: [ "a" = "b" ]
já possui 4 argumentos: "a" "=" "b" e o final desnecessário do teste arg: "]"). Se você precisar de mais: testes em cadeia com, por exemplo:if [ "$Var_a" = "foo" ] && [ "$Var_b" = "bar" ] ; then : do something ; fi
!
por si só (sem escape e sem aspas) não será substituído, e melhor ainda if ! [ ...
. Todas as expansões festança que usam !
incluir pelo menos em outro personagem
[
-builtin bash
(e possivelmente outros reservatórios), e que isso pode ser usado em vez de /bin/[
. Também existe o test
comando-, que em muitos sistemas é um link simbólico para /bin/[
(ou vice-versa) - mas em outros é um comando separado.
[
refere-se aotest
comando, porém, nãoexpr
, assim que deve serman test