测试(AIX 和 ksh93)

测试(AIX 和 ksh93)

我对我们使用的 ksh93 测试限定符之一感到困惑。二十多年前,我们参加了“Unix Shell 编程 - 以 KornShell 为特色”课程。在该课程附带的手册中,它说如果文件存在,“-a filename”就会成功。从那时起我们就广泛使用“-a”。我最近发现这个链接,上面写着“-a”是一个用于测试的“二进制 AND 运算符”(我们在 AIX 7.1 上使用 ksh93),“man test”显示与该链接相同的输出。

https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/com.ibm.aix.cmds5/test.htm

现在该链接似乎是通用 AIX 链接。也就是说,对我来说,它不是特定于 ksh、csh、sh 等,所以我不确定它是如何应用的。

看来我们现有的代码确实按预期工作。这是我们目前如何使用它的示例。

if [[ -a filename ]]
then
    ....
fi

我意识到还有其他用于测试文件的限定符,但我想知道为什么“-a”似乎会检查是否存在,而联机帮助页表明它不会。

提前致谢。

答案1

ksh手册中:

   Conditional Expressions.
       A  conditional  expression  is  used with the [[ compound command to test attributes of files and to
       compare strings.  Field splitting and file name generation are not performed on the words between [[
       and  ]].   Each  expression  can  be  constructed  from one or more of the following unary or binary
       expressions:
       string True, if string is not null.
       -a file
              Same as -e below.  This is obsolete.
       -e file
              True, if file exists.

答案2

中存在的二进制文件test(或)与可能是 shell 内置程序的二进制文件不同;请参阅 shell 的文档。如果您调用,或者实际上您可能正在调用 shell 内置函数而不是二进制文件,具体取决于 shell。以下不是 AIX 也不是它的 KSH,而是传家宝 bourne shell 或Mac OS X 上的,其中不支持或存在标志,但支持:[PATH[[[[test[mkshsh[[-amksh

$ sh
$ [[ -a /etc/passwd ]] && echo yea
[[: not found
$ [ -a /etc/passwd ] && echo yea
test: argument expected
$ exit
$ [[ -a /etc/passwd ]] && echo yea
yea
$ [ -a /etc/passwd ] && echo yea
yea
$ 

相关内容