0 votos

Variables en pruebas 'if' en bash

Quiero comprobar si el archivo ~/tost1 existe, usando la variable $i, la cual es igual a ~/tost1. La declaración if no funciona con la variable. ¿Hay alguna manera de arreglarlo?

$ i=~/tost1
$ echo $i
~/tost1
$ if [ -e ${i} ]; then echo "el archivo existe"; fi

$ if [ -e ~/tost1 ]; then echo "el archivo existe"; fi
el archivo existe

0voto

Guillermo Gomez Puntos 423

La declaración if está realmente comprobando si hay un archivo llamado tost1 bajo un directorio llamado ~, en lugar de su directorio de inicio. Puede comprobarlo de esta manera:

$ i=~
$ echo $i
~
$ echo ~
/home/ibug

Dos soluciones:

1. Evitar la tilde ~ en variables

Utilice $HOME en su lugar.

Las tildes se expanden a $HOME bajo un criterio muy estricto, que por supuesto no incluye cuando la tilde está en el valor de una variable.

Cámbiela a esto

i=$HOME/tost1

2. Permite que la shell lo evalúe de nuevo.

Cambia la línea a esto:

eval if [ -e ${i} ]; then echo \""el archivo existe"\"; fi
^~~~                           ^~             ^~

Sin embargo, necesitas comillas adicionales para asegurarte de que la cadena "el archivo existe" se trate como un único argumento para echo.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X