O que você faz e por que existe?
A opção -a
é a mesma coisa que -e
e existe para compatibilidade com o Korn Shell do qual o Bash emprestou muitos recursos.
Do padrão POSIX, descrição do comando test
( link ):
Uma proposta inicial usava o KornShell -a primário (com o mesmo significado), mas isso foi alterado para -e porque havia preocupações sobre a alta probabilidade de humanos confundirem o -a primário com o -a operador binário.
nota lateral : binary significa sinalizador que aparece entre duas variáveis [ $var1 -a $var2 ]
, principal significa aparecer na lista de argumentos primeiro como em [ -a $var ]
Na verdade, o manual Korn Shell ( ksh93
here) afirma:
-a arquivo
O mesmo que -e abaixo. Isso é obsoleto.
O comando test
usado no artigo do TLDP que você referenciou usa bash built-in test
, no entanto, a opção também está presente em /usr/bin/test
, apesar de estar ausente da documentação:
$ /usr/bin/test -a /etc/passwd && echo 1
1
Se a funcionalidade é a mesma, é recomendável usá-la?
Desde que você tenha 100% de certeza de que seus scripts serão usados no Bash ou no Korn Shell - então sim, tudo bem. No entanto, se você se esforçar para a portabilidade de seus scripts e quiser escrever o script Right Way TM , deverá usar -e
. O shell padrão do Ubuntu, /bin/sh
, que na verdade é Dash - o Debian Amquist Shell - não reconhece essa opção como válida:
$ dash
$ test -a /etc/passwd
dash: 1: test: -a: unexpected operator
Nos casos em que você deseja portar seu script para outras plataformas, não é garantido que usar -a
também seja seguro com /usr/bin/test
, e você deve ficar com -e
porque é de fato especificado pelo padrão POSIX .