这是我正在研究的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
我做错了什么?
答案 0 :(得分:5)
问题是bash在shell参数替换之前执行代码扩展,因此在~/path/to/folder
替换$dir
后,它不会尝试扩展~
,因此它会查找一个字面上以波浪号命名的目录,当然不存在。有关bash扩展的更详细说明,请参阅section 3.5 of the bash manual。
答案 1 :(得分:1)
尝试:
dir="$HOME/path/to/$1/folder"