-1

这条线有什么问题?

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

如果 grep 在 getprop 输出中找到“net.tcp.buffersize ...”,它应该返回一个真值。

4

2 回答 2

5

的参数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 …
于 2012-09-06T17:55:33.660 回答
1

我可以看到两个问题:

  1. grep命令中,需要对左方括号进行转义
  2. 在这种情况下,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 来搜索文字字符串,而不是使用正则表达式。

于 2012-09-06T17:57:37.650 回答