-f $file_name funktioniert nicht bei Verwendung von ~/file_name, funktioniert aber bei Verwendung von /home/james/file_name

-f $file_name funktioniert nicht bei Verwendung von ~/file_name, funktioniert aber bei Verwendung von /home/james/file_name

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 bashEinzelheiten finden Sie unter.

verwandte Informationen