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
bashmanual:Y, para las expresiones, una de las opciones es:
Entonces puedes
andjuntarlos de la siguiente manera (-nes lo contrario de-zpara que podamos deshacernos de!):Sin embargo, no creo que sea necesario en este caso,
-e xyzzyes cierto si elxyzzyarchivo existe y puede manejar fácilmente cadenas vacías. Si eso es lo que quieres, entonces no necesitas el-zcheque no vacío:En otras palabras, solo use:
fuente
[[ -e "$var" ]] && echo "'$var' exists"fuente
POSIXno define el comportamiento de[con conjuntos complejos de pruebas, debemos evitar usar-ao-ocon[. Lo leí aquí .bashetiqueta y no menciona sobre POSIX, así que publico esta versión que funciona bajobashy algunos otros shells modernos.bashu otros proyectiles modernos, hay incluso menos razones para recomendarlo-a.[ "$var1" -o "$var2" ]; sivar1=(yvar2=), entonces lo que tenemos es una prueba de si-ono está vacío, en lugar de si estávar1ovar2no está vacío. Este tipo de ambigüedad es la única razón legítima para elx$varmodismo en lostestcomandos 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$VARestá 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