
これは私を悩ませています。私はかなりシンプルなスクリプトを持っています
#!/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
詳細については、を参照してください。