我的 KornShell (ksh) 手册说,-d
如果文件存在并且它是一个目录,则表达式返回 true。因此,如果是目录,if [[ -d file ]]
则应返回 TRUE 。file
但就我而言,这不是它的工作方式。如果文件存在并且不是目录,则返回 TRUE,但 shell 手册说“它是目录”。那么有人知道为什么它的工作方式与它应该的相反吗?
问问题
59 次
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."
}
于 2014-01-06T22:32:39.273 回答