我遇到这个构造来测试$foo
可以包含任意字符串的 shell 变量是否匹配foo
:
[ "x$foo" = "xfoo" ]
x
从未解释过前缀 with 的目的。这看起来像是试图避免当$foo
包含特殊的测试字符串(如=
、-f
、(
或 )时可能出现的错误!
。 GNU 信息手册指出涉及复合表达式-a
并-o
可能导致歧义,因此我主要对简单(即非复合)语句感兴趣。我很难找到这方面的更多信息。我无法设计一个导致 GNUtest
以意外方式失败的任意字符串的示例,尽管我坦率地承认我并不那么聪明。
我的问题:
- 在 中添加参数替换前缀的原因是什么
test
? - 是否有一个涉及简单参数替换(即没有前缀保护)的简单(即非复合)语句的示例,该语句导致
test
给出异常结果?
我主要在 Linux 上使用 GNU 工具,但出于可移植性的考虑,我感兴趣的是是否test
也在其他平台上使用。
答案1
> [ -f = -a -a -a ]
bash: [: argument expected
> [ -f = -a -a x ]
但:
[ x-f = x-a -a -a ]
虽然也不起作用
[ -a ]
很好。