0

我在试图理解的 ksh 脚本中有以下代码片段......

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

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

4

1 回答 1

3

-a 连接两个查询的“和”。但是,它的使用已被弃用(至少在 POSIX 标准中)并且可以替换为:

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

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

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

test命令(即[)不能识别&&为代替 的运算符,-a这就是为什么推荐的与 POSIX 兼容的替换是分隔test由 shell&&运算符连接的命令的原因。

于 2013-06-07T18:03:06.400 回答