• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    深入理解Bash中的尖括号(适合初学者)

    前言

    Bash 内置了很多诸如 ls、cd、mv 这样的重要的命令,也有很多诸如 grep、awk、sed 这些有用的工具。但除此之外,其实 Bash 中还有很多可以起到胶水作用的标点符号,例如点号(.)、逗号(,)、括号(<>)、引号(")之类。下面我们就来看一下可以用来进行数据转换和转移的尖括号(<>)。

    转移数据

    如果你对其它编程语言有所了解,你会知道尖括号 < 和 > 一般是作为逻辑运算符,用来比较两个值之间的大小关系。如果你还编写 HTML,尖括号作为各种标签的一部分,就更不会让你感到陌生了。

    在 shell 脚本语言中,尖括号可以将数据从一个地方转移到另一个地方。例如可以这样把数据存放到一个文件当中:

    ls > dir_content.txt

    在上面的例子中,> 符号让 shell 将 ls 命令的输出结果写入到 dir_content.txt 里,而不是直接显示在命令行中。需要注意的是,如果 dir_content.txt 这个文件不存在,Bash 会为你创建;但是如果 dir_content.txt 是一个已有的非空文件,它的内容就会被覆盖掉。所以执行类似的操作之前务必谨慎。

    你也可以不使用 > 而使用 >>,这样就可以把新的数据追加到文件的末端而不会覆盖掉文件中已有的数据了。例如:

    ls $HOME > dir_content.txt; wc -l dir_content.txt >> dir_content.txt

    在这串命令里,首先将家目录的内容写入到 dir_content.txt 文件中,然后使用 wc -l 计算出 dir_content.txt 文件的行数(也就是家目录中的文件数)并追加到 dir_content.txt 的末尾。

    在我的机器上执行上述命令之后,dir_content.txt 的内容会是以下这样:

    Applications
    bin
    cloud
    Desktop
    Documents
    Downloads
    Games
    ISOs
    lib
    logs
    Music
    OpenSCAD
    Pictures
    Public
    Templates
    test_dir
    Videos
    17 dir_content.txt

    你可以将 > 和 >> 作为箭头来理解。当然,这个箭头的指向也可以反过来。例如,Coen brothers (LCTT 译注:科恩兄弟,一个美国电影导演组合)的一些演员以及他们出演电影的次数保存在 CBActors 文件中,就像这样:

    John Goodman 5
    John Turturro 3
    George Clooney 2
    Frances McDormand 6
    Steve Buscemi 5
    Jon Polito 4
    Tony Shalhoub 3
    James Gandolfini 1

    你可以执行这样的命令:

    sort < CBActors
    Frances McDormand 6 # 你会得到这样的输出
    George Clooney 2
    James Gandolfini 1
    John Goodman 5
    John Turturro 3
    Jon Polito 4
    Steve Buscemi 5
    Tony Shalhoub 3

    就可以使用 sort 命令将这个列表按照字母顺序输出。但是,sort 命令本来就可以接受传入一个文件,因此在这里使用 < 会略显多余,直接执行 sort CBActors 就可以得到期望的结果。

    如果你想知道 Coens 最喜欢的演员是谁,你可以这样操作。首先:

    while read name surname films; do echo $films $name $surname > filmsfirst.txt; done < CBActors

    上面这串命令写在多行中可能会比较易读:

    while read name surname films;\
    
    do
    echo $films $name $surname >> filmsfirst;\
    
    done < CBActors

    下面来分析一下这些命令做了什么:

    执行完以后,查看 filmsfirst 文件,内容会是这样的:

    5 John Goodman
    3 John Turturro
    2 George Clooney
    6 Frances McDormand
    5 Steve Buscemi
    4 Jon Polito
    3 Tony Shalhoub
    1 James Gandolfini

    这时候再使用 sort 命令:

    sort -r filmsfirst

    就可以看到 Coens 最喜欢的演员是 Frances McDormand 了。(-r 参数表示降序排列,因此 McDormand 会排在最前面)

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    上一篇:Bash中尖括号的更多使用方法
    下一篇:搭建Docker私有仓库(自签名方式)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    深入理解Bash中的尖括号(适合初学者) 深入,理解,Bash,中的,尖,