Android 如果[$(getprop | grep';[net.tcp.buffersize.default]:[409687380110208409616384110208]';)]

Android 如果[$(getprop | grep';[net.tcp.buffersize.default]:[409687380110208409616384110208]';)],android,bash,grep,Android,Bash,Grep,这条线怎么了 if [ $(getprop | grep '[net.tcp.buffersize.default]:[4096,87380,110208,4096,16384,110208]') ] 如果grep在getprop输出中找到“net.tcp.buffersize…”,它应该返回一个真值。grep的参数是一个。字符[,]和具有特殊含义,因此参数不会按字面解释。要查找文字字符串,请将-F选项传递到grep。要查找与该字符串完全相同的行,请传递-F-x 您测试grep结果的方式没有任

这条线怎么了

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语句不需要方括号
  • 因此,你的声明应该是:

    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来搜索文本字符串,而不是使用正则表达式