2018年8月7日玩 22:43:45在帅老师的群里,“N31-行者灬无疆”问:

问题

第一种  grep 'a*' <`ls` ,第二种grep ajie  <ols 是这样子么?

我的见解

刚开始我就注意到了这道问题,我对于“N31-行者灬无疆”的说法是否定的,由于电脑在实验室,所以没有实际操作。我根据输出字体的颜色判断(显然对grep做了别名,alias grep='grep --color=auto')第一,二种grep 是做了执行的。但自己又说不出能说服自己的见解,我开始的见解是第一种:ls | grep a*没有执行而是直接执行的grep a*,原因是根据输出的字体颜色得出的结论。第二种:ls | grep 'a*'是执行先执行ls,在将ls的输出通过管道交给grep去匹配。但这中见解显然也是存在矛盾的,因为第一种: ls | grep a* 及匹配到了文件名又匹配到了内容。

帅老师第一次模拟:

没有输出内容!

群内见解

群内有人认为:应该输出a.txt。持这种观点的群友有不少。

还有群友认为:pattern部分需要使用引号引用起来。不然bash不会将a*用正则表达式解释,用ls | grep "a*"试试应该是对的。不加引号的话,bash优先解释啊,会将a*解释为以字母a开头的任意字符串,就轮不到grep去处理了。或者说,即使grep处理了,也不是grep所理解的正则表达式了,而是bash的通配符。我不同意这个说法,因为系统不会欺骗,字体颜色明明显示grep是做了处理的。

之后群里还出现了别的说法,但基本第一种解释不同。

帅老师解答

终于在帅老师的探索下找到了正确答案:

两个问题,1个是管道问题,一个是grep的a*被shell解释了

ls | grep a*,管道两边的进程同时启动,ls的输出放进管道,但是grep a*的a*被shell扩展为a开头的文件,你的root目录下有多个a开头的文件,所以你管道里的内容不会被grep读取,因为它已经有输入了
[root@node3 root]# grep a*
ab.txt:aaaa
ab.txt:aaaaaaa
ac.txt:bba
a.log:aaaabbb
a.txt:aaaa
a.txt:aaaaaaa

你的a文件被当作了grep的pattern
被匹配的文件是除了a的其它a开头文件
这是grep的参数
第一个'a'被grep当作了pattern
如果你把a文件删除,你会一个都匹配不出来

这个ab.txt被当作pattern
但是后面的ac.txt a.log。。。。文件中不包含字符串'ab.txt',所以匹配不到,然后你的ls | grep 'a*',因为这个时候grep缺少输入,所以会从管道读数据

,当作输入文件,管道右边的程序不一定会读取管道左边的内容。只有当管道右边的程序缺少stdin的时候,才会从滚到读数据。这里的ls是多余的,因为grep不需要从ls读取数据作为stdin。在bash中,通配符只是在文件名扩展的时候用的,它会扩展为文件名,然后作为命令的参数。因为你这里的grep除了a*外没有任何参数,所以文件名扩展后排在第一个位的文件"a"就被当作grep的pattern参数部分,其余的被当作grep的输入文件

N31-行者灬无疆:我一开始也是抓取不到内容,然后我发现对方目录下有个 a 文件


这个是ls ab.txt | strace grep a*的结果
这个是ls | strace grep a*的结果,这里并没有读取ls的"ab.txt\n",而是直接打开文件,读取里面的内容的
所以,当进程已经有了stdin的时候,不会读取管道的数据作为stdin
不过可能加上"-"会强制当作stdin

总结:

a*因为没有引号保护,在执行前被Bash按照通配符规则解释成了 a  ax  axx ......,并依次与当前目录下的文件进行匹配,匹配到的结果依次排列在grep后面并以空格分隔,于是命令被展开成grep a a.txt a.log ...... 随后进行了执行。第一个a被识别为pattern,而后面的字符串则被识别为文件名。

这么描述应该好理解点吧。而加-强行读入的内容则是被识别为了文本而非文件名(ls命令输出的是文本)。   关键是管道的机制让人蒙圈。

这件事对我的影响:

帅老师的解答问题的思路,让我学到了许多:
1.遇到问题,不要根据自己的想法去猜测,特别是不懂的问题
2.问题本身不可怕,特别是在Linux中,专业的人士是根据实际测得的数据得出的结论
3.在没有实践前最好不要发表言论,ui时候思考不如实践

对了,还没隆重的介绍我们的帅老师呢:先说好他是个秃子,毕竟头不秃不能说自己在学IT。
他就是:博客园--骏马金龙

骏马金龙:http://www.cnblogs.com/f-ck-need-u/

头脑风暴-记一道有趣的问题相关推荐

  1. javascript基础修炼(13)——记一道有趣的JS脑洞练习题

    [摘要] 开脑洞,也巩固基础知识 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 一. 题目 改 ...

  2. 一道很有意思的面试题目,快加入到这场头脑风暴游戏里吧~

    小伙伴们,小叶秋最近看到一个面试题目,感觉挺有意思的,大意如下: ok,大家看到这个题,可以先理解下,这里启动了两个线程,a 和 b,但是虽然说 a 在 b 之前 start,不一定就可以保证线程 a ...

  3. html5 签到墙,创意头脑风暴!5种个性签名墙设计超有范儿

    创意才是婚礼上永恒不败的话题,不管是什么样子的婚礼形式,总是有很多的小小的创意隐藏其中,比如说,近几年婚礼上兴起的签名薄就上了墙,就像明星婚礼一样十分的有范儿,小小的签名墙会有什么样的创意呢?各位准新 ...

  4. 【第五组】头脑风暴+核心竞争力+NABCD+个人(用例+功能+技术说明书) 最后修改时间 2017.07.13...

    2017.07.13版 因为对之前版本做了较多修改,所以重新发了,并且在博客下方保留原有版本作为记录. 头脑风暴结果: 刚开始我们无法确定要做一个什么样的应用程序,总结之前可视化课程的作业,我们提出了 ...

  5. [头脑风暴] 解读Docker Bridge网络模型

    背景 这几天在研究Kubernetes, 遇到一个有意思的nodejs镜像:luksa/kubia # 不带端口映射启动容器 docker run -it -d luksa/kubia # 连接到默认 ...

  6. 头脑风暴算法代码_混乱的头脑导致混乱的代码

    头脑风暴算法代码 We live in a world with many things that consume our time, and the constant need of always ...

  7. 一道有趣的最长子序列问题

    一道有趣的最长子序列问题 – 潘登同学的金融经济学笔记 文章目录 一道有趣的最长子序列问题 -- 潘登同学的金融经济学笔记 来源 求解 递推公式 算法实现 来源 前几天在刷视频的时候,发现了这样一道题 ...

  8. Curio for Mac(头脑风暴思维导图)

    Curio for Mac是一款Mac上非常好用的Mac上的头脑风暴/思维导图软件,Curio Mac具有头脑风暴跟思维导图功能,同时Curio还具有强大的项目管理功能.它可以直观地收集,并记得您的想 ...

  9. 头脑风暴有两位盲人_盲人时如何获得开发人员工作:与有远见的团队一起工作的盲人开发人员的建议...

    头脑风暴有两位盲人 I'm a Dutch developer, and I recently graduated with a bachelor's degree in IT. I'm fully ...

最新文章

  1. 嫌弃俄罗斯的火箭报价太黑!马斯克自己造火箭!SpaceX首次载人发射任务成功!太牛了!...
  2. 科大星云诗社动态20210323
  3. python学习-装饰器(可变参装饰器、完善装饰器)
  4. Web内容管理系统 Magnolia 启程-挖掘优良的架构(3)
  5. 【渝粤题库】国家开放大学2021春2108刑法学(2)答案
  6. java链式调用空指针_java 链式调用
  7. lol新服务器怎么发信息,《英雄联盟手游》国服新消息 最新玩法发布
  8. C语言作业 – 数组排序算法可视化
  9. 用户调用机房收费下机中用到的策略与职责链解析
  10. matlab时频工具箱简介,matlab时频分析工具箱下载_matlab时频分析工具箱官方下载-太平洋下载中心...
  11. 【理解】Beta贝塔分布
  12. 如何查计算机的开机启动程序,Win7系统电脑如何查看开机启动项?
  13. 用Python求三角形面积
  14. python的print输出格式举例_python中print输出格式是什么
  15. STM32F103C8T6实现流水灯
  16. 关于风险管理,如何将思维从项目升维到项目群?
  17. 读《Ivor Horton's beginning Visual C++ 2010》有感
  18. 成为百万富翁的四个方法
  19. jpanel麻将自动打牌,碰牌,杠牌
  20. CloudXNS首次使用体验

热门文章

  1. SEM推广营销远比你想象得更丰富
  2. 自学PHP笔记(二)PHP数据类型
  3. [转载][MFC]MFC的美化
  4. 中医书竟然和IT书籍一样有书贼行为
  5. 计算机音乐植物大战僵尸泳池,植物大战僵尸 泳池关卡 背景音乐
  6. midas MeshFree 2021 R1 Buld 2021.05.03 x64 Multilingual
  7. contrast matlab,Matlab基本函数-contrast函数
  8. 如何在Elsevier中插入作者简介
  9. uni-app获取短信验证码
  10. android自定义计步器形状,Android自定义view-QQ计步器效果