【问题标题】:Strange error checking if directory exists with Bash script使用 Bash 脚本检查目录是否存在的奇怪错误
【发布时间】:2009-06-10 08:29:02
【问题描述】:

这是我正在处理的 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
目录 ~/path/to/123/folder 不存在

但该文件夹显然确实存在。这正常工作:

> ls ~/path/to/123/文件夹

我做错了什么?

【问题讨论】:

    标签: bash


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试:

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

      【讨论】:

      • 仅仅因为 Joakim 根本没有提供任何解释:你引用了 ~。 ~ 仅在波浪号扩展期间以 bash 扩展,但是您引用的任何内容都会禁用其特殊含义,因此波浪号 (~) 不再意味着“扩展到当前用户的主目录”。它只是意味着:“当前目录中的目录称为〜”。哪个不存在,因此出现错误。
      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多