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

时间:2009-06-10 00:02:08

标签: bash

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

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

if [ -d "$dir" ]; then
    # do some stuff
else
    echo "Directory $dir doesn't exist";
    exit 1
fi

当我从终端运行时:

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

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

> ls ~/path/to/123/folder

我做错了什么?

2 个答案:

答案 0 :(得分:5)

问题是bash在shell参数替换之前执行代码扩展,因此在~/path/to/folder替换$dir后,它不会尝试扩展~,因此它会查找一个字面上以波浪号命名的目录,当然不存在。有关bash扩展的更详细说明,请参阅section 3.5 of the bash manual

答案 1 :(得分:1)

尝试:

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