我在ksh脚本中有以下代码片段,我正在尝试理解这些代码...
if [ -f ${FILELIST} -a -s ${FILELIST} ]; then
......
fi第一部分是检查文件是否以用来代替变量FILELIST的名称存在。第二部分是让我困惑的地方。我相信-a正在检查符号链接,而-s正在检查文件大小是否大于零,但没有" and“或" or”子句将这两个项目链接在一起。这是在尝试检查文件是否存在,还是符号链接是否存在大小大于零的文件?
发布于 2013-06-08 02:03:06
-a是连接这两个查询的"and“。但是,它的使用已被弃用(至少在POSIX标准中是如此),可以替换为:
if [ -f "$FILELIST" ] && [ -s "$FILELIST" ]; then在ksh中( -a也可能被混淆地用作-e的过时同义词),您还可以使用
if [[ -f "$FILELIST" && -s "$FILELIST" ]]; thentest命令(例如,[)不能将&&识别为替代-a的运算符,这就是为什么推荐的POSIX兼容的替代方案是分隔由外壳&&运算符连接的test命令。
https://stackoverflow.com/questions/16990057
复制相似问题