2012-03-09 14 views
5

Estoy tratando de verificar si existe un archivo usando bash. Este es mi código`if [-e file.txt]` no funciona en bash

if [-e file.txt]; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 

Pero cuando lo ejecuto me sale:

./test.sh: line 3: [-e: command not found 

¿Qué estoy haciendo mal?

Respuesta

10

[ no es un token especial en Bash; es solo que la palabra [ es un comando incorporado (al igual que echo). Entonces necesitas un espacio después de eso. Y, del mismo modo, es necesario un espacio antes ]:

if [ -e file.txt ] ; then 

Dicho esto, recomiendo [[ ]] lugar — Es más seguro en varias formas (aunque todavía requiere los espacios):

if [[ -e file.txt ]] ; then 
+0

+1. Simplemente tenga en cuenta que '[[' es una función bash, por lo que no puede invocar su secuencia de comandos con '/ bin/sh' –

+0

Podría editar su respuesta para explicar por qué doble corchetes cuadrados es más seguro, por favor? – Relequestual

2
if [ -e file.txt ]; then 

Necesita espacios. [ y ] son programas regulares.

+5

ser pedante, '] 'no es un programa, es el último argumento necesario para el' [ 'comando –

+0

@ "Glenn Jackman": Por supuesto. Lo siento. – jacekmigacz

0

el '[' y ']' debe estar 'en su propio', es decir, rodeado de espacios.

if [ -e file.txt ] *emphasized text*; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 
2

Woops, resulta que necesitaba un espacio entre [ y -e. De esta manera:

if [ -e file.txt ]; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 
Cuestiones relacionadas