-f $file_name não funciona ao usar ~/file_name mas funciona ao usar /home/james/file_name

-f $file_name não funciona ao usar ~/file_name mas funciona ao usar /home/james/file_name

Isso tem me deixado maluco. Eu tenho um script bem simples

#!/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

Eu passo um arquivo ~/changeList.txt, que falha. Eu passo /home/james/changeList.txt e funciona. eu tento

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

do meu terminal e ele retorna verdadeiro.
Estou usando o Ubuntu no wsl 2 e estou conectado como James.

Responder1

A expansão do til acontece antes da expansão da variável. Em uma atribuição, o valor do lado direito sofre expansão de til, então a variável recebe o caminho completo. Veja man bashpara detalhes.

informação relacionada