这条线有什么问题?
if [ $(getprop | grep '[net.tcp.buffersize.default]:[4096,87380,110208,4096,16384,110208]') ]
如果 grep 在 getprop 输出中找到“net.tcp.buffersize ...”,它应该返回一个真值。
的参数grep
是一个正则表达式。字符[
,]
和.
具有特殊含义,因此不会按字面解释该参数。要查找文字字符串,请将-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 …
我可以看到两个问题:
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 来搜索文字字符串,而不是使用正则表达式。