对现有目录的测试通过对不存在目录的测试

对现有目录的测试通过对不存在目录的测试

行动

我在用户配置文件中设置了环境变量

export DATADIR=<absolute path set with `readlink -e target`>

预期成果

再次获取配置文件后,我检查它是否链接到目标

echo ${DATADIR}; ls ${DATADIR}

这是一个通行证。如果我做一个测试是否

test -d ${DATADIR} && echo yes || echo no

它是一个预期通过以及(结果“是”)

意想不到的结果

但是,如果我给出另一个根本没有定义的目录名,比如任何乱码名称,测试

test -d ${HJIWEODSB} && echo yes || echo no

也给我一个是的,那是一个意外的通过,因为这个名称既不是文件也不是目录。

再次达到预期效果

其实也

test -d  && echo yes || echo no

给出 yes,这让我认为它以与ls

问题

我查看了 test 的手册页和此页面生命线。也许我忽略了他们的一些事情。总之,我需要对目录是否存在进行可靠的测试。欢迎指正和提示。


当然,请随意投反对票。然而,任何关于为什么这没有用或不清楚或表明没有研究工作的建议都将受到赞赏。

答案1

事实上,由于这篇文章的写作,我找到了答案。

为了获得预期的结果,请在引号中包含变量名称:

test -d "${DATADIR}" && echo yes || echo no

给出是,同时

test -d "${GIBBERISH}" && echo yes || echo no

给出没有。

(元评论:我决定不删除我的问题,因为一些未来的读者可能会从中受益。请版主决定这是否合适。)

相关内容