这条线有什么问题?
if [ $(getprop | grep '[net.tcp.buffersize.default]:[4096,87380,110208,4096,16384,110208]') ]
如果grep在getprop输出中找到'net.tcp.buffersize ...',它应该返回一个真值。
答案 0 :(得分:5)
grep
的论点是regular expression。字符[
,]
和.
具有特殊含义,因此参数不会按字面解释。要查找文字字符串,请将-F
选项传递给grep
。要查找完全不符合该字符串的行,请传递-F -x
。
您测试grep
结果的方式没有任何意义。 $(…)
获取输出(即匹配的行)并将它们分成单词(因为$(…)
周围没有双引号)。然后将这些单词(将成为getprop
输出的部分)解析为[
内置的条件。要测试某些输入是否与grep
匹配,请测试grep
命令的返回状态,并传递-q
选项以禁止输出。
if getprop | grep -q -F -x '[net.tcp.buffersize.default]:[4096,87380,110208,4096,16384,110208]'; then …
答案 1 :(得分:1)
我可以看到两个问题:
grep
命令中,您需要转义左方括号因此,您的陈述应为:
if getprop | grep '\[net.tcp.buffersize.default]:\[4096,87380,110208,4096,16384,110208]'
你还需要逃避点:
if getprop | grep '\[net\.tcp\.buffersize\.default]:\[4096,87380,110208,4096,16384,110208]'
或者,正如Gilles指出的那样,你应该使用-F来搜索文字字符串而不是使用正则表达式。