2013-05-03 72 views

回答

3

One should never parse the output of ls。如果您正在使用bash,请尝试此操作

if [ -d "$DIRECTORY" ]; then 
    # will enter here if $DIRECTORY exists. 
fi 
+2

再次出现同样的错误。 '〜> if [[-d“a”]];然后cd a;否则回显“ER”; fi' '-bash:[[-d:command not found' 'ER' – 2013-05-03 15:21:21

+2

[]中的空格很重要。即'[-d“a”]'会起作用,但'[-d“a”]'不会。另外,'test -d“a”'将在bash和csh中工作 – 2013-05-03 16:04:31

2
test -d 'name' && echo "It is there" 

test -d 'name'可用于if语句之类为好。

1

试试这个吗?

ls -l | grep ^d name 
+0

这将在名为'name'的文件的一行的开头处搜索'd'。 – Kevin 2013-05-03 14:44:07

+0

我当然不是专家。但它对我有用吗?如果你有第二个,我不介意吸取教训。这个:ls -l | grep^d Web 返回这个:grep:Web:当我尝试使用时,它是我的一个目录 – eatonphil 2013-05-03 14:46:04

+1

这种方法没有什么*错误*,除非你不应该从ls解析输出[see link](http:/ /mywiki.wooledge.org/ParsingLs)'ls -l'显示使用长列表的结果,其中第一个字段是文件模式位。如果它作为文件夹,第一个字符将是一个'd',与正则表达式'^ d'相匹配。所以,这种方法有效,但它有缺陷(再次请参阅链接)。 – 2013-05-03 15:01:39

3

这就是-d测试的目的。简单地说:

if [ -d "name" ]; then 
    echo "yay!" 
else 
    echo "nay!" 
fi