KSH条件查询

时间:2013-06-07 17:46:03

标签: ksh

我在ksh脚本中有以下代码片段,我正在努力理解......

if [ -f ${FILELIST} -a -s ${FILELIST} ]; then
......
fi

第一部分是检查文件是否存在于用于代替变量FILELIST的名称。第二部分是令我困惑的事情。我相信-a正在检查符号链接,-s正在检查文件大小是否大于零但是没有“AND”或“OR”子句将这两个项链接在一起。这是否试图检查文件是否存在或者是否存在大小大于零的符号链接?

1 个答案:

答案 0 :(得分:3)

-a 加入两个查询的“和”。但是,它的使用已弃用(至少通过POSIX标准),可以替换为:

if [ -f "$FILELIST" ] && [ -s "$FILELIST" ]; then

ksh中(其中-a也可能会被混淆地用作-e的过时同义词),您也可以使用

if [[ -f "$FILELIST" && -s "$FILELIST" ]]; then

test命令(即[)无法将&&识别为-a的运算符,这就是为什么建议的POSIX兼容替换是由shell test运算符连接的单独&&命令。