2014-01-23 65 views
1

目录检查失败,我有以下代码来测试目录存在:SH:当目录中存在

PROJECT="somedir" 
if [ -d ~/migrations/$PROJECT ] ; then 
    echo "Test" 
fi 

dst_dir="~/migrations/$PROJECT" 
if [ -d "$dst_dir" ] ; then 
    echo "Test 2" 
fi 

出于某种原因,只输出测试。我期望它输出测试测试2

相当新的shell脚本,我错过了什么?我觉得它与~有关。

+1

为了您的方便将来,[shellcheck(http://www.shellcheck.net)会指出,'〜'不加引号扩大。 –

+0

@那个人,谢谢你的资源。 –

+0

显然在这里没有什么区别,但你应该在单括号内按惯例引用“$ PROJECT”。 – BroSlow

回答

4

因为代字号~需要在引号外。

尝试:

dst_dir=~/migrations/$PROJECT 

~报价时不展开。

测试:

s="~" 
ls "$s" 
ls: ~: No such file or directory 

s=~ 
ls "$s" 
# list comes here 
+0

你能否详细说明一下? –

+0

检查我更新的答案。 – anubhava

+2

请参阅http://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html – fedorqui

相关问题