何时传递任意字符串来测试不明确性

何时传递任意字符串来测试不明确性

我遇到这个构造来测试$foo可以包含任意字符串的 shell 变量是否匹配foo

[ "x$foo" = "xfoo" ]

x从未解释过前缀 with 的目的。这看起来像是试图避免当$foo包含特殊的测试字符串(如=-f(或 )时可能出现的错误!。 GNU 信息手册指出涉及复合表达式-a-o可能导致歧义,因此我主要对简单(即非复合)语句感兴趣。我很难找到这方面的更多信息。我无法设计一个导致 GNUtest以意外方式失败的任意字符串的示例,尽管我坦率地承认我并不那么聪明。

我的问题:

  1. 在 中添加参数替换前缀的原因是什么test
  2. 是否有一个涉及简单参数替换(即没有前缀保护)的简单(即非复合)语句的示例,该语句导致test给出异常结果?

我主要在 Linux 上使用 GNU 工具,但出于可移植性的考虑,我感兴趣的是是否test也在其他平台上使用。

答案1

> [ -f = -a -a -a ]
bash: [: argument expected

> [ -f = -a -a x ]

但:

[ x-f = x-a -a -a ]

虽然也不起作用

[ -a ]

很好。

相关内容