-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/jame/changeList.txt,成功了。我尝试

file_name=~/changeList.txt
[ -f $file_name ] && echo "true" || echo "false"

从我的终端,它返回 true。
我在 wsl 2 上使用 Ubuntu,并以 james 身份登录。

答案1

波浪号扩展发生在变量扩展之前。在赋值中,右侧值会经历波浪号扩展,因此变量会被赋予完整路径。man bash详情请参阅。

相关内容