![-f $file_name funktioniert nicht bei Verwendung von ~/file_name, funktioniert aber bei Verwendung von /home/james/file_name](https://rvso.com/image/1071720/-f%20%24file_name%20funktioniert%20nicht%20bei%20Verwendung%20von%20~%2Ffile_name%2C%20funktioniert%20aber%20bei%20Verwendung%20von%20%2Fhome%2Fjames%2Ffile_name.png)
Das hat mich verrückt gemacht. Ich habe ein ziemlich einfaches Skript
#!/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
Ich übergebe ihm eine Datei ~/changeList.txt, das schlägt fehl. Ich übergebe ihm /home/james/changeList.txt, und es funktioniert. Ich versuche
file_name=~/changeList.txt
[ -f $file_name ] && echo "true" || echo "false"
von meinem Terminal und es gibt true zurück.
Ich verwende Ubuntu auf WSL 2 und bin als James angemeldet.
Antwort1
Die Tilde-Erweiterung erfolgt vor der Variablenerweiterung. Bei einer Zuweisung wird der Wert auf der rechten Seite einer Tilde-Erweiterung unterzogen, sodass der Variablen der vollständige Pfad zugewiesen wird. Weitere man bash
Einzelheiten finden Sie unter.