奇怪的错误检查目录是否存在Bash脚本

nic*_*ckf 2 bash

这是我正在研究的bash脚本:

dir="~/path/to/$1/folder"

if [ -d "$dir" ]; then
    # do some stuff
else
    echo "Directory $dir doesn't exist";
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

当我从终端运行它时:

> ./myscript.sh 123
Directory ~/path/to/123/folder doesn't exist

但该文件夹显然确实存在.这通常有效:

> ls ~/path/to/123/folder

我究竟做错了什么?

Ada*_*eld 5

问题是执行的bash shell参数置换前波浪线扩展,因此它替换后~/path/to/folder$dir,它并不试图扩大~,因此它会寻找与它波浪线,这当然是不存在的字面命名的目录.有关bash扩展的更详细说明,请参阅bash手册的第3.5节.