遇到一个问题,需要判断目录下是否存在.c文件。我使用了if [ -f *.c ],用-f和通配符来判断是否有.c的文件存在,然而linux一直报错“unexpected operator”,因此在-f下,后面是不能使用通配符的。
后来,我想了一个土办法,if [ -n “‘ls *.c'” ],这句话的意思是,如果ls命令执行后有得到内容,则是真,其中-n表示后面的内容不是空值时为真。这句话是可以用,可以判断文件存在在目录下,但是,这是出现了个问题,如果目录下没有.c的文件,就会报错“No such file or directory”,于是我放弃了这个方法。
最后一个QQ群里一个牛人告诉我,使用 if ls *.c >/dev/null 2>&1;then,这是一个重定向的方法,ls所有以.c为后缀的文件,如果不存在,将标准错误重定向到标准输出,这里2>&1 的意思就是将标准错误也输出到标准输出当中。重定向中 0-标准输出,1-标准输出,2-标准错误,而No such file or directory是一个标准错误。
值得注意的是:这个if后面没有中括号!并且2>&1的“>”是没有空格的!