test (AIX e ksh93)

0

Estou confuso em um dos qualificadores de teste ksh93 que usamos. Vinte anos atrás, fizemos um curso "Unix Shell Programming - com o KornShell". No manual que acompanhou esse curso, diz que "-a filename" será bem-sucedido se o arquivo existir. Nós usamos "-a" extensivamente desde então. Recentemente encontrei este link que diz que "-a" é um "operador binário AND" para testes (estamos usando o ksh93 no AIX 7.1), e 'man test' mostra a mesma saída que o link.

link

Agora, esse link parece ser um link geral do AIX. Isto é, não é óbvio para mim que é específico para o ksh, csh, sh, etc, então não tenho certeza de como isso se aplica.

Parece que nosso código existente funciona conforme o esperado. Veja um exemplo de como o usamos atualmente.

if [[ -a filename ]]
then
    ....
fi

Eu percebo que existem outros qualificadores para o teste de arquivos, mas estou me perguntando por que "-a" parece verificar a existência enquanto a página de manual sugere que isso não acontece.

Obrigado antecipadamente.

    
por Scavenger 08.01.2018 / 19:00

2 respostas

2

Do manual ksh :

   Conditional Expressions.
       A  conditional  expression  is  used with the [[ compound command to test attributes of files and to
       compare strings.  Field splitting and file name generation are not performed on the words between [[
       and  ]].   Each  expression  can  be  constructed  from one or more of the following unary or binary
       expressions:
       string True, if string is not null.
       -a file
              Same as -e below.  This is obsolete.
       -e file
              True, if file exists.
    
por 08.01.2018 / 19:19
1

O binário test (ou [ ) que existe em PATH não é o mesmo que [[ , que pode ser um shell embutido; para [[ consulte a documentação do shell. Se você chamar test ou [ , talvez esteja chamando um shell embutido e não o binário, dependendo do shell. O seguinte não é o AIX nem seu KSH, mas sim o shell bourne da herança ou mksh no Mac OS X, em que sh não suporta o sinalizador [[ ou -a , mas mksh :

$ sh
$ [[ -a /etc/passwd ]] && echo yea
[[: not found
$ [ -a /etc/passwd ] && echo yea
test: argument expected
$ exit
$ [[ -a /etc/passwd ]] && echo yea
yea
$ [ -a /etc/passwd ] && echo yea
yea
$ 
    
por 08.01.2018 / 19:13

Tags