-f $nombre_archivo no funciona cuando se usa ~/nombre_archivo pero funciona cuando se usa /home/james/nombre_archivo

-f $nombre_archivo no funciona cuando se usa ~/nombre_archivo pero funciona cuando se usa /home/james/nombre_archivo

Esto me ha estado volviendo loco. Tengo un script bastante simple.

#!/bin/bash

read -p "Enter changeList.txt file name: " file_name

if  [ -f $file_name ]; then
    echo "Reading File..."
    cat $file_name | grep "Change " | cut -d ' ' -f 2
    echo "Process complete"
else
    echo >&2 "File Note Found."
    exit 1
fi 

echo "Exiting..."
exit 0

Le paso un archivo ~/changeList.txt, que falla. Lo paso /home/james/changeList.txt y funciona. lo intento

file_name=~/changeList.txt
[ -f $file_name ] && echo "true" || echo "false"

desde mi terminal y devuelve verdadero.
Estoy usando Ubuntu en wsl 2 y he iniciado sesión como james.

Respuesta1

La expansión de tilde ocurre antes de la expansión variable. En una asignación, el valor del lado derecho sufre una expansión de tilde, por lo que a la variable se le asigna la ruta completa. Ver man bashpara más detalles.

información relacionada