LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2368|回复: 3

问一个简单shell问题,将grep的输出赋值给一个变量

[复制链接]
发表于 2009-6-26 12:32:32 | 显示全部楼层 |阅读模式
用grep命令得到的输出赋值给一个变量不成功。

grep命令如下:

  1. $ grep -c '^abc' file.txt
复制代码

输出为22,表示file.txt中以abc开头的行的数目。

现在将输出赋值给一个变量:

  1. myvar=`grep -c '^abc' file.txt`
复制代码

得到的$myvar值为0,貌似是将命令的返回状态值付给了变量,而不是命令的输出内容。
但是用myvar=`pwd`是没有问题的,输出付给了变量。是不是grep命令有特别注意的地方?谢谢。
发表于 2009-6-26 16:39:08 | 显示全部楼层
好象没有问题:
(a=`grep -c ' mysql' /dev/shm/l`; echo $a)
21
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-26 21:41:37 | 显示全部楼层
Post by openfree;2001413
好象没有问题:
(a=`grep -c ' mysql' /dev/shm/l`; echo $a)
21

刚试了一下,直接匹配没有问题。
用了正则表达的时候就会有这问题,比如
加了-E选项也一样,$a输出为0.

附上我的例子,有一个tex文件,内含有:
  1. .....
  2. \bibitem
  3. .....
复制代码
用以下的命令:
  1. $ a=`grep -c '^\\bibitem' file.tex`; echo $a
复制代码
输出为0。
直接执行 grep -c '^\\bibitem' file.tex 输出为正常值。
可能是正则表达和转义哪块有问题。
谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-26 21:53:06 | 显示全部楼层
知道问题在哪了。赋值时,正则表达里的转义符两个backslash都需要转义。所以应该是:
  1. a=`grep -c '^\\\\bibitem' paper.tex`;echo $a
复制代码
愚蠢的错误。
多谢大家。
Post by michaelyung;2001479
刚试了一下,直接匹配没有问题。
用了正则表达的时候就会有这问题,比如
加了-E选项也一样,$a输出为0.

附上我的例子,有一个tex文件,内含有:
  1. .....
  2. \bibitem
  3. .....
复制代码
用以下的命令:
  1. $ a=`grep -c '^\\bibitem' file.tex`; echo $a
复制代码
输出为0。
直接执行 grep -c '^\\bibitem' file.tex 输出为正常值。
可能是正则表达和转义哪块有问题。
谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表