怎么理解Bash中的尖括号,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。为初学者介绍尖括号。Bash 内置了很多诸如 ls、cd、mv 这样的重要的命令,也有很
怎么理解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
的内容会是以下这样:
ApplicationsbincloudDesktopDocumentsDownloadsGamesISOsliblogsMusicOpenSCADPicturesPublicTemplatestest_dirVideos17 dir_content.txt
你可以将 >
和 >>
作为箭头来理解。当然,这个箭头的指向也可以反过来。例如,Coen brothers (LCTT 译注:科恩兄弟,一个美国电影导演组合)的一些演员以及他们出演电影的次数保存在 CBActors
文件中,就像这样:
John Goodman 5John Turturro 3George Clooney 2Frances McDORMand 6Steve Buscemi 5Jon Polito 4Tony Shalhoub 3James Gandolfini 1
你可以执行这样的命令:
sort < CBActorsFrances McDormand 6 # 你会得到这样的输出George Clooney 2James Gandolfini 1John Goodman 5John Turturro 3Jon Polito 4Steve Buscemi 5Tony 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
下面来分析一下这些命令做了什么:
while …; do … done 是一个循环结构。当 while
后面的条件成立时,do
和 done
之间的部分会一直重复执行;
read 语句会按行读入内容。read
会从标准输入中持续读入,直到没有内容可读入;
CBActors
文件的内容会通过 <
从标准输入中读入,因此 while
循环会将 CBActors
文件逐行完整读入;
read
命令可以按照空格将每一行内容划分为三个字段,然后分别将这三个字段赋值给 name
、surname
和 films
三个变量,这样就可以很方便地通过 echo $films $name $surname >> filmsfirst;\
来重新排列几个字段的放置顺序并存放到 filmfirst
文件里面了。
执行完以后,查看 filmsfirst
文件,内容会是这样的:
5 John Goodman3 John Turturro2 George Clooney6 Frances McDormand5 Steve Buscemi4 Jon Polito3 Tony Shalhoub1 James Gandolfini
这时候再使用 sort
命令:
sort -r filmsfirst
就可以看到 Coens 最喜欢的演员是 Frances McDormand 了。(-r
参数表示降序排列,因此 McDormand 会排在最前面)
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。
--结束END--
本文标题: 怎么理解Bash中的尖括号
本文链接: https://lsjlt.com/news/283057.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0