if [$(getprop | grep'[net.tcp.buffersize.default]:[4096,87380,110208,4096,16384,110208]')]

时间:2012-09-06 17:41:18

标签: android bash grep

这条线有什么问题?

if [ $(getprop | grep '[net.tcp.buffersize.default]:[4096,87380,110208,4096,16384,110208]') ]
如果grep在getprop输出中找到'net.tcp.buffersize ...',它应该返回一个真值。

2 个答案:

答案 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)

我可以看到两个问题:

  1. grep命令中,您需要转义左方括号
  2. 在这种情况下,if语句不需要方括号
  3. 因此,您的陈述应为:

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