![-f $file_name не работает при использовании ~/file_name, но работает при использовании /home/james/file_name](https://rvso.com/image/1071720/-f%20%24file_name%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D0%BF%D1%80%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20~%2Ffile_name%2C%20%D0%BD%D0%BE%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D0%BF%D1%80%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20%2Fhome%2Fjames%2Ffile_name.png)
Это сводит меня с ума. У меня довольно простой сценарий
#!/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
Подробнее см.