-f $file_name не работает при использовании ~/file_name, но работает при использовании /home/james/file_name

-f $file_name не работает при использовании ~/file_name, но работает при использовании /home/james/file_name

Это сводит меня с ума. У меня довольно простой сценарий

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

Я передаю ему файл ~/changeList.txt, он не работает. Я передаю ему /home/james/changeList.txt, и он работает. Я пробую

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

из моего терминала, и он возвращает true.
Я использую Ubuntu на wsl 2, и я вошел как james.

решение1

Расширение тильды происходит до расширения переменной. В присваивании значение с правой стороны подвергается расширению тильды, поэтому переменной присваивается полный путь. man bashПодробнее см.

Связанный контент