我在ksh脚本中有以下代码片段,我正在努力理解......
if [ -f ${FILELIST} -a -s ${FILELIST} ]; then
......
fi
第一部分是检查文件是否存在于用于代替变量FILELIST的名称。第二部分是令我困惑的事情。我相信-a正在检查符号链接,-s正在检查文件大小是否大于零但是没有“AND”或“OR”子句将这两个项链接在一起。这是否试图检查文件是否存在或者是否存在大小大于零的符号链接?
答案 0 :(得分:3)
-a
加入两个查询的“和”。但是,它的使用已弃用(至少通过POSIX标准),可以替换为:
if [ -f "$FILELIST" ] && [ -s "$FILELIST" ]; then
在ksh
中(其中-a
也可能会被混淆地用作-e
的过时同义词),您也可以使用
if [[ -f "$FILELIST" && -s "$FILELIST" ]]; then
test
命令(即[
)无法将&&
识别为-a
的运算符,这就是为什么建议的POSIX兼容替换是由shell test
运算符连接的单独&&
命令。