shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script-pt] Expansão de nomes de arquivos: if x [[ -e ]]


From: Minis novais MN
Subject: Re: [shell-script-pt] Expansão de nomes de arquivos: if x [[ -e ]]
Date: Sun, 12 Apr 2020 18:18:56 -0300

esses comandos no Pc o que dar 🤔

Em dom, 12 de abr de 2020 18:14, Julio C. Neves <address@hidden> escreveu:
Buenas Romano,
cara, acabei de escrever uma dica sobre isso, que pode ser vista, criticada e comentada aqui:

O que acontece é que as opções do cmd test, ([...]ou [[...]]) são unárias, isto é só aceitam 1 único argumento. No cmd test antigo ([...]) e o shell fazia a expansão antes do cmd ser executado e isso acarretava erro. Para que não haja erro o novo test ([[...]]) expande os coringas, mas se isso resultar em mais de um, "desexpande ;)". Veja isso:

$ ls a*
a.txt  aa.txt  arq1  arq2  arq3  arq4  arq5
$ [ -e a* ] && echo existe    # Olha a msg de erro - a opção é unária
bash: [: número excessivo de argumentos
$ [ -e a.* ] && echo existe   # Funciona pq casou só com a.txt
existe
$ [[ -e a* ]] && echo existe  # Expandiu e desexpandiu
$ [[ -e a.* ]] && echo existe # Expandiu só para a.txt
existe

Para verificar se o arquivo existe, vc pode simplesmente fazer:
$ ls arq* > /dev/null && {
    echo existem os seguintes:
    ls -l
}

Mas para saber se são arquivos do tipo normal, vc teria de fazer:
$ for Arq in arq*
{
    [[ -f "$Arq" ]] && echo $Arq existe e é um arquivo de dados # poderia ser [ -f "$Arq" ]
}

OBS: Até uns 50+ arquivos com mesmo prefixo ou sufixo, é mais rápido fazer:
do que o touch arq{"",1,2,3} que vc usou. touch é para manipular timestamp, não é para criar arquivos. Experimente fazer:
time for ((i=1; i<200; i++))
{
    > /tmp/arq
}
e depois:
time for ((i=1; i<200; i++))
{
    touch /tmp/arq
}

Terminam hoje às 23:59 h ss matrículas para o meu Curso de Programação em Shell (de Nutella a Root).
Apesar da crise, resolvemos lançá-lo pensando que as pessoas estão com tempo para se preparar mais estudando e sair dessa crise numa situação melhor.
Mas como é tempo de crise, estamos dando, mas só nesse treinamento, 20% de desconto.
Veja os detalhes em https://educacao.dicas-l.com.br/shell-linux, mas não deixe de ver, pq o que propiciamos é bem diferente do que existe.
Abraços,
Julio





Em dom., 12 de abr. de 2020 às 17:34, address@hidden <address@hidden> escreveu:
Olá,

Estou com uma curiosidade a respeito de como o if e o [[ ]] respondem à expansão de nomes.


Vamos supor que eu tenha alguns arquivos que iniciam com os mesmos caracteres:
[root@host ~]# touch arq{"",1,2,3}
[root@host ~]# ls arq*
arq  arq1  arq2  arq3
Os arquivos foram criados e o ls aceita o coringa *:
[root@host ~]# ls arq*
arq  arq1  arq2  arq3

Eu gostaria de testar se arquivos arq* existem (qualquer um começando com 'arq', usando o coringa '*'):

Com if funciona usando o ls ...
[root@host ~]# if ls ./arq*> /dev/null; then echo "Existe"; else echo "Não existe"; fi
Existe
Mas se eu usar o [[ -e ]] (test moderno, testando se o arquivo existe) não funciona com o coringa...
[root@host ~]# [[ -e ./arq ]] && echo Existe || echo Não existe
Existe
[root@host ~]# [[ -e ./arq1 ]] && echo Existe || echo Não existe
Existe
[root@host ~]# [[ -e ./arq* ]] && echo Existe || echo Não existe   # <----
Não existe

É pura curiosidade. Posso usar o if, mas gostaria de saber se realmente o [[ ]] não permite expansão de nomes.


Abraços a todos!

Renato Romano
São B. Campo/SP
------------------------------------------------------------------------------------------------


_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: address@hidden
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: address@hidden
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]