shell中的trailing newline

本文详细解析了Shell命令中trailingnewline的概念及其在实际操作中的应用,通过实验验证了其在命令执行过程中的作用,并解释了ls命令返回换行符数量与实际显示内容数量之间的差异,提供了深入理解Shell命令处理细节的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           最近在学shell脚本,发现很多的shell命令都涉及到一个trailing newline的东西,例如wc -l。

            man wc,找到-l发现解释如下:

                        print the newline counts

          即打印出newline 的个数,那newline 到底是什么东西呢?翻了翻词典,发现是结尾换行符的意思,那是不是结尾的时候按下回车的时候产生的换行符呢?

          在百度搜索资料,发现了一篇文章,原来“很多软件或命令都会自动加上一个trailing newline,也就是c语言里的\n,ascii码为10”。

           自己动手验证下:

            #vi test

           输入如下内容 :

            abcd                1234

            #wc -l test,

              发现返回值为1.

            #vi test2

              输入如下内容:

             abcd

              1234

           #wc -l test2

          而这次的返回值变成了2!。两次的内容的唯一的差别就是我多敲了一个回车,而wc -l选项是统计newline即回车符的个数的,所以才会导致两次的结果变化。

          写到这里忽然想起来一个疑问:

            #ls

                Desktop    examples.desktop    hello.c    nus       Public     test
               Documents  fcitx-4.0.0         helloword  nusers    t          Ubuntu One
               Downloads  fcitx-4.0.0.tar.gz  Music      Pictures  Templates  Videos

              #ls | wc -l

                  18

           问题来了,为什么返回值是18?ls返回的结果只有三行,不是应该有三个换行符吗?那接过应该是3呀。

           #ls > t

           #cat t

           Desktop
           Documents
           Downloads
           examples.desktop
           fcitx-4.0.0
           fcitx-4.0.0.tar.gz
           hello.c
           helloword
           Music
           nus
           nusers
           Pictures
          Public
          t
          Templates
          test
          Ubuntu One
          Videos
       我把输入重定向之后发现每一个字符后面都跟有一个换行符,应该是ls命令在每个字符的后面都有跟着换行符来分割字符,只是输出到终端的时候删掉了一部分。


       参考文章:关于trailing newline

      链接:    http://blog.163.com/wwthunan@126/blog/static/396261352009101881620464/


                 

              

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值