考虑一下...
#!/bin/bash
declare STR='test'
declare SUB=''
[[ "${STR}" == *"${SUB}"* ]] && echo 'match'
这似乎解决或评估为真?这对我来说毫无意义。
要获得预期的结果,您必须测试 SUB 字符串是否为空?
#!/bin/bash
declare STR='test'
declare SUB=''
[[ ! -z "${SUB}" ]] && [[ "${STR}" == *"${SUB}"* ]] && echo 'match'
这是 BASH 之类的怪癖吗?如果子字符串不在字符串中,它不应该返回false吗?
答案 0 :(得分:1)
空字符串是每个字符串的一部分。因此,测试一个空字符串是否是其他任何字符串的子字符串总是正确的。
这不是 bash 特有的,也不是任何不寻常的;你可以用其他语言查看。
print('' in 'foo')
打印 True
。String("foo").contains("")
返回 true。strstr("foo", "")
返回指向 foo
中第一个字符的指针,表示它找到了匹配项。"foo".include? ""
返回 true。答案 1 :(得分:0)
是的,您应该明确检查可能的空字符串,但我会使用 .grid-container * {
border: 1px solid red;
position: relative;
}
.grid-container *:after {
content:attr(class);
position: absolute;
top: 0;
left: 0;
而不是 not,并且在 -n
中,您可以将其设为单个复合条件检查。
bash
...而且您不需要前导和尾随 glob,它们实际上并没有添加任何内容。