Linux笔记5.展开与引用

参数展开

路径名展开

[root@senlong usr]# echo *
bin etc games include lib lib64 libexec local man sbin share src tmp

为何echo不打印 * ?是因为shell把 * 展开成了另外的东西(在这种情况下,就是在当前工作目录下的文件名字)

这种通配符工作机制叫做路径名展开

[root@senlong usr]# echo l*
lib lib64 libexec local

算术表达式展开

shell 允许算术表达式通过展开来执行。这允许我们把 shell 提示当作计算器来使用:

[guohongqing@gz-ct-99 Logs]$ echo $((2+2))
4

算术表达式展开使用这种格式:

$((expression))

(以上括号中的)表达式是指算术表达式,它由数值和算术操作符组成。

算术表达式只支持整数(全部是数字,不带小数点),但是能执行很多不同的操作:

操作符

说明

+

-

*

/

除(但是记住,因为展开只是支持整数除法,所以结果是整数。)

%

取余,只是简单的意味着,“余数”

**

取幂

花括号展开

可以从一个包括花括号的模式中创建多个文本字符串:

[root@senlong ~]# echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back

花括号展开模式可能包含一个开头部分叫做报头,一个结尾部分叫做附言。花括号表达式本身可能包含一个由逗号分开的字符串列表,或者一系列整数,或者单个的字符串。这种模式不能嵌入空白字符。

[root@senlong ~]# echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
[root@senlong ~]# echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
[root@senlong ~]# echo a{A{1,2},B{3,4}}b  # 展开可以嵌套
aA1b aA2b aB3b aB4b

应用场景:创建一系列的文件或目录列表。例如,把大量相片按年月先后组织起来,需要创建一系列以数值”年-月”形式命名的目录。

[root@senlong ~]# mkdir Pics
[root@senlong ~]# cd Pics
[root@senlong Pics]# mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
[root@senlong Pics]# ls
2007-01  2007-07  2008-01  2008-07  2009-01  2009-07
2007-02  2007-08  2008-02  2008-08  2009-02  2009-08
2007-03  2007-09  2008-03  2008-09  2009-03  2009-09
2007-04  2007-10  2008-04  2008-10  2009-04  2009-10
2007-05  2007-11  2008-05  2008-11  2009-05  2009-11
2007-06  2007-12  2008-06  2008-12  2009-06  2009-12

参数展开

这个特性在 shell 脚本中比直接在命令行中更有用。它的许多性能 和系统存储小块数据,并给每块数据命名的能力有关系。许多像这样的小块数据, 更适当些应叫做变量,可以方便地检查它们。例如,叫做”USER”的变量包含你的 用户名。唤醒参数展开,揭示 USER 中的内容,可以这样做:

[root@senlong Pics]# echo $USER
root
[root@senlong Pics]# printenv | less

命令替换

命令替换允许我们把一个命令的输出作为一个展开模式来使用:

[root@senlong tmp]# echo $(ls)
[root@senlong tmp]# file $(ls /usr/bin/* | grep zip)

Linux

引用

我们已经知道 shell 有许多方式可以完成展开,现在是时候学习怎样来控制展开了。 以下面例子来说明:

[root@senlong tmp]# echo this is a   test
this is a test
[root@senlong tmp]# echo The total is $100.00
The total is 00.00

在第一个例子中,shell 从 echo 命令的参数列表中,删除多余的空格。

在第二个例子中, 参数展开把 $1 的值替换为一个空字符串,因为 1 是没有定义的变量。shell 提供了一种 叫做引用的机制,来有选择地禁止不需要的展开。

双引号

我们将要看一下引用的第一种类型,双引号。如果你把文本放在双引号中, shell 使用的特殊字符,除了 $,\ (反斜杠),和 `(倒引号)之外, 则失去它们的特殊含义,被当作普通字符来看待。这意味着单词分割,路径名展开, 波浪线展开,和花括号展开都被禁止,然而参数展开,算术展开,和命令替换 仍然执行。使用双引号,我们可以处理包含空格的文件名。

记住,在双引号中,参数展开,算术表达式展开,和命令替换仍然有效:

[root@senlong tmp]# echo "$USER $((2+2)) $(cal)"
root 4      April 2017     
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

单引号

如果需要禁止所有的展开,使用单引号

[root@senlong tmp]# echo $USER
root
[root@senlong tmp]# echo '$USER'
$USER
[root@senlong tmp]# echo "$USER"
root

转义字符

有时候我们只想引用单个字符。我们可以在字符之前加上一个反斜杠,在这个上下文中叫做转义字符。经常在双引号中使用转义字符,来有选择地阻止展开。

[root@senlong tmp]# echo "The balance for user $USER is: \$5.00"

注意在单引号中,反斜杠失去它的特殊含义,它 被看作普通字符。

反斜杠转义字符序列

反斜杠除了作为转义字符外,反斜杠也是一种表示法的一部分,这种表示法代表某种 特殊字符,叫做控制码。ASCII 编码表中前32个字符被用来把命令转输到像电报机 一样的设备。一些编码是众所周知的(制表符,退格符,换行符,和回车符),其它 一些编码就不熟悉了(空值,传输结束码,和确认)。

转义序列

含义

\a

响铃(”警告”-导致计算机嘟嘟响)

\b

退格符

\n

新的一行。在类 Unix 系统中,产生换行。

\r

回车符

\t

制表符

[root@senlong tmp]# sleep 3; echo -e "Time's up\a"

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Go入门系列

Golang 入门系列(二)Go语言基础语法及需要注意的坑

上一章节我们已经了解了 Go 环境的配置,不了解的,请查看前面的文章 https://www.cnblogs.com/zhangweizhong/p/94599...

110
来自专栏散尽浮华

Nginx的location配置规则梳理

Nginx几乎是当下绝大多数公司在用的web应用服务,熟悉Nginx的配置,对于我们日常的运维工作是至关重要的,下面就Nginx的location配置进行梳理:...

1977
来自专栏企鹅号快讯

看完这篇文章我知道至少85%的人是没有入门Python的!花两周整理

以前刚学编程的时候就对Python略有耳闻,不过学校只有C,C++,Java,C#。和PHP有句"PHP是最好的语言" 这种家喻户晓的骚话一样,Python也有...

2257
来自专栏北京马哥教育

一篇文章学会shell工具篇之sed

? sed工具执行原理; 有关sed的参数及action的常见操作方法; 定址; 模式空间和保持空间; 使用标签 1.首先先来了解一下什么是sed? sed叫...

2847
来自专栏nimomeng的自我进阶

《Objective-C基础教程》笔记

1.xcode中,oc的.m文件代表message,指的是Objective-C的一个主要特性。 2.NS前缀的来历要追溯到次公局包还被成为NextStep,...

542
来自专栏思考的代码世界

Python编程从入门到实践之用户输入|第7天

函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在 一个变量中,以方便你使用。

3118
来自专栏解Bug之路

MySQL多版本并发控制机制(MVCC)-源码浅析 顶

作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你玩转...

942
来自专栏潇涧技术专栏

Python Basics

1.使用glob模块可以用通配符的方式搜索某个目录下的特定文件,返回结果是一个list

732
来自专栏数据库

高级盲注—floor,rand,group by报错注入

大家好,我是你们的老朋友Alex。最近一直在学习SQL注入,发现了很多很多有趣的东西。我就分享我的一篇有关floor,rand,group by报错注入的笔记吧...

1939
来自专栏CSDN技术头条

用 Webhook+Python+Shell 编写一套 Unix 类系统监控工具

本文来自作者 Alinx 在 GitChat 上分享 「用 Webhook+Python+Shell 编写一套 Unix 类系统监控工具」

1074

扫码关注云+社区