【问题标题】:KSH Conditional QueryKSH 条件查询
【发布时间】:2013-06-07 17:46:03
【问题描述】:

我试图理解的 ksh 脚本中有以下 sn-p 代码...

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

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

【问题讨论】:

  • 我有一个习惯,每当我进行测试时,我都会运行ksh -n script.ksh,因为它会检查脚本的语法并指出要更改的内容。常见的建议是 warning: line 4: -a obsolete, use -e

标签: ksh


【解决方案1】:

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

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

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

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

test 命令(即[)无法将&& 识别为代替-a 的运算符,这就是为什么推荐的与POSIX 兼容的替换是将test 命令分开的原因外壳&& 运算符。

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 2012-05-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2019-02-20
    • 2019-06-11
    相关资源
    最近更新 更多