Acho que não sou claro sobre como fazer "e" testes. Eu queria ter certeza de que existia um argumento que funcionasse bem [ -e $VAR ]
, mas acontece que também estava sendo avaliado como verdadeiro em uma string vazia; o que eu não quero.
Como eu os 'e' juntos? Ou há outro teste unário que realiza o que eu quero?
bash
; no entanto, para aproveitar ao máximo os "basismos", consulte a resposta de @ paxdiablo.-a
.Na página de
bash
manual:E, para expressões, uma das opções é:
Para que você possa
and
reuni-los da seguinte forma (-n
é o oposto de-z
para nos livrarmos do!
):No entanto, acho que não é necessário, neste caso,
-e xyzzy
é verdade se oxyzzy
arquivo existe e pode lidar facilmente com cadeias de caracteres vazias. Se é isso que você deseja, na verdade você não precisa da verificação-z
não vazia:Em outras palavras, basta usar:
fonte
[[ -e "$var" ]] && echo "'$var' exists"
fonte
POSIX
não define o comportamento de[
conjuntos complexos de testes, devemos evitar usar-a
ou-o
com[
. Eu li aqui .bash
tag e não menciona o POSIX, então eu posto esta versão que funciona sobbash
outras conchas modernas.bash
ou outras conchas modernas, há ainda menos motivos para recomendar-a
.[ "$var1" -o "$var2" ]
; ifvar1=(
evar2=)
, então o que temos é um teste para saber se-o
está vazio, e não se está vaziovar1
ouvar2
não. Esse tipo de ambiguidade é a única razão legítima para ox$var
idioma nostest
comandos modernos (isto é, pós-anos 90) com citações corretas, e esse idioma precisa morrer em um incêndio.Simplesmente cite sua variável:
Isso avalia
[ -e "" ]
se$VAR
está vazio.Sua versão não funciona porque é avaliada como
[ -e ]
. Agora, neste caso, o bash simplesmente verifica se o argumento único (-e
) é uma sequência não vazia.Na página de manual:
(Além disso, esta solução tem o benefício adicional de trabalhar com nomes de arquivos contendo espaços)
fonte
Encontrei uma resposta agora. Obrigado por suas sugestões!
Algum comentário sobre isso? Parece ineficiente grep duas vezes, mas funciona ...
fonte