-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詳細については、を参照してください。

関連情報