Supongo que no tengo claro cómo hacer "y" pruebas. Quería asegurarme de que existiera un argumento que funcionara bien [ -e $VAR ]
, pero resulta que también se estaba evaluando como verdadero en una cadena vacía; que no quiero
¿Cómo los 'y' juntos? ¿O hay otra prueba unaria que logra lo que quiero?
bash
; sin embargo, para aprovechar al máximo los "bashismos", vea la respuesta de @ paxdiablo.-a
.Desde la página del
bash
manual:Y, para las expresiones, una de las opciones es:
Entonces puedes
and
juntarlos de la siguiente manera (-n
es lo contrario de-z
para que podamos deshacernos de!
):Sin embargo, no creo que sea necesario en este caso,
-e xyzzy
es cierto si elxyzzy
archivo existe y puede manejar fácilmente cadenas vacías. Si eso es lo que quieres, entonces no necesitas el-z
cheque no vacío:En otras palabras, solo use:
fuente
[[ -e "$var" ]] && echo "'$var' exists"
fuente
POSIX
no define el comportamiento de[
con conjuntos complejos de pruebas, debemos evitar usar-a
o-o
con[
. Lo leí aquí .bash
etiqueta y no menciona sobre POSIX, así que publico esta versión que funciona bajobash
y algunos otros shells modernos.bash
u otros proyectiles modernos, hay incluso menos razones para recomendarlo-a
.[ "$var1" -o "$var2" ]
; sivar1=(
yvar2=)
, entonces lo que tenemos es una prueba de si-o
no está vacío, en lugar de si estávar1
ovar2
no está vacío. Este tipo de ambigüedad es la única razón legítima para elx$var
modismo en lostest
comandos modernos (es decir, posteriores a los 90) con una cita correcta, y ese modismo debe morir en un incendio.Simplemente cita tu variable:
Esto evalúa
[ -e "" ]
si$VAR
está vacío.Su versión no funciona porque se evalúa como
[ -e ]
. Ahora, en este caso, bash simplemente comprueba si el argumento único (-e
) es una cadena no vacía.Desde la página del manual:
(Además, esta solución tiene la ventaja adicional de trabajar con nombres de archivo que contienen espacios)
fuente
Encontré una respuesta ahora. Gracias por tus sugerencias!
¿Algún comentario sobre eso? Parece ineficiente hacer grep dos veces, pero funciona ...
fuente