回复此评论时:
现在我得到了两个“:”是独立的,这就是为什么我找不到任何关于它们的文件的原因。在这种情况下需要第一个吗?
我第一次注意到规范中的这一段:
在前面显示的参数扩展中,在格式中使用 <colon> 将导致对未设置或 null 的参数进行测试;<冒号> 的省略将导致对仅未设置的参数进行测试。如果参数是'#'并且省略了冒号,应用程序应确保指定单词(这是避免字符串长度扩展产生歧义所必需的)。
我在 bash 参考手册中看到了匹配的解释:
当不执行子字符串扩展时,使用下面描述的形式(例如,':-'),Bash 测试未设置或为空的参数。省略冒号会导致仅对未设置的参数进行测试。换句话说,如果包含冒号,则运算符测试两个参数的存在以及它的值是否不为空;如果省略冒号,则运算符仅测试是否存在。
之前,我了解这些扩展的冒号版本有什么区别。
刚才让我感到困惑的是规范中的这句话:
如果参数是'#'并且省略了冒号,应用程序应确保指定单词(这是避免字符串长度扩展产生歧义所必需的)。
word
如果未指定,我不明白这里可能有什么歧义。
扩展符号在 shell 变量名称中均无效,因此它们不可能以单字符变量名称开头。如果他们可以使用 a parameter
of ,#
那么在没有冒号的情况下总是会模棱两可,因为您永远无法判断是${#+foo}
指变量的长度foo
还是 的替代扩展#
等。
我在这里想念什么?什么歧义需要确保word
存在?(我的意思是没有word
在这个扩展中显然没有用,但那不是一回事。)