-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。
我在 wsl 2 上使用 Ubuntu,並且以 james 登入。

答案1

波形符擴充發生在變數擴充之前。在賦值中,右側值會進行波形符擴展,因此變數會被指派完整路徑。man bash詳情請參閱。

相關內容