1

我的 KornShell (ksh) 手册说,-d如果文件存在并且它是一个目录,则表达式返回 true。因此,如果是目录,if [[ -d file ]]则应返回 TRUE 。file但就我而言,这不是它的工作方式。如果文件存在并且不是目录,则返回 TRUE,但 shell 手册说“它是目录”。那么有人知道为什么它的工作方式与它应该的相反吗?

4

2 回答 2

3

它工作正常;是你的期望是错误的。在 shell 中,0返回值为true非零返回值为false

$ true ; echo $?
0
$ false ; echo $?
1
于 2013-06-18T12:32:37.773 回答
0

ksh 文件操作符 | 真如果:

  • -a | 文件已存在
  • -d | 文件是一个目录
  • -f | file 是常规文件(即,不是目录或其他特殊类型的文件)
  • -r | 您对文件有读取权限
  • -s | 文件存在且不为空
  • -w | 您对文件有写权限
  • -x | 您对文件具有执行权限,如果是目录,则具有目录搜索权限
  • -O | 文件 你拥有的文件
  • -G | file 你的group ID和file的一样

kshFileOperatorsFunction.ksh

#***Function to demo ksh file Operators.***#
fileOperators(){
    echo "Entering fileOperators function."
    if [[ ! -a $1 ]]; then
        print "file $1 does not exist."
        return 1
    fi
    if [[ -d $1 ]]; then
        print -n "$1 is a directory that you may "
        if [[ ! -x $1 ]]; then
            print -n "not "
        fi
        print "search."
    elif [[ -f $1 ]]; then
         print "$1 is a regular file."
    else
         print "$1 is a special type of file."
    fi
    if [[ -O $1 ]]; then
        print 'you own the file.'
    else
        print 'you do not own the file.'
    fi
    if [[ -r $1 ]]; then
        print 'you have read permission on the file.'
    fi
    if [[ -w $1 ]]; then
        print 'you have write permission on the file.'
    fi
    if [[ -x $1 && ! -d $1 ]]; then
        print 'you have execute permission on the file.'
    fi
    echo "Exiting fileOperators function."
}

参考:O'Reilly,学习 KornShell 第 1 卷

于 2014-01-06T22:32:39.273 回答