linux shell编程指南第十五章------引号

上一章介绍了变量和替换操作,在脚本中执行变量替换时最容易犯的一个错误就是由于

引用错误。在命令行中引用是很重要的。

这里只讲述引用的基本规则。因为使用引用的例子很多。本书接下来的两个部分将一一
予以讲述。脚本中执行行操作时, s h e l l将对脚本设置予以解释。要采取一种方法防止s h e l l这
样做,即使用引用号,包括各式引用或使用反斜线。

下面列出各种引用类型。
" "    双引号       `    反引号
' '     单引号          \     反斜线

双引号:

使用双引号可引用除字符$、`、\外的任意字符或字符串。这些特殊字符分别为美元符号,
反引号和反斜线,对s h e l l来说,它们有特殊意义。如果使用双引号将字符串赋给变量并反馈
它,实际上与直接反馈变量并无差别。

[root@localhost huangcd]# string="nihao huang cheng du"
[root@localhost huangcd]# echo "$string"
nihao huang cheng du
[root@localhost huangcd]# echo $string
nihao huang cheng du

因为s h e l l将" "符号里的字符串赋予变量m y d a t e,d a t e已没有特定意义,故此变量只保存单
词d a t e。

[root@localhost huangcd]# mydate="date"
[root@localhost huangcd]# echo $mydate
date

如果要查询包含空格的字符串,经常会用到双引号。以下使用g r e p抽取名字“Davey Wi r e”,
因为没有加双引号, g r e p将“D a v e y”认作字符串,而把“Wi r e”当作文件名。

要解决这个问题,可将字符串加双引号。这样s h e l l会忽略空格,当使用字符时,应总是
使用双引号,无论它是单个字符串或是多个单词。

[root@localhost huangcd]# grep "Sabayon user" /etc/passwd
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin

在一个反馈的文本行里可以使用双引号将变量引起来。下面的例子中, s h e l l反馈文本行,
遇到符号$,知道这是一个变量,然后用变量值b o y替换变量$ B O Y。

[root@localhost huangcd]# boy="BOY"
[root@localhost huangcd]# echo "The $boy did well"
The BOY did well
[root@localhost huangcd]# echo "the "$boy" did well"
the BOY did well

单引号:

单引号与双引号类似,不同的是s h e l l会忽略任何引用值。换句话说,如果屏蔽了其特殊
含义,会将引号里的所有字符,包括引号都作为一个字符串。使用上一个例子,结果如下:

[root@localhost huangcd]# girl='GIRL'
[root@localhost huangcd]# echo "the '$girl' did well"
the 'GIRL' did well
[root@localhost huangcd]# echo 'the '$girl' did well'
the GIRL did well

反引号:

反引号用于设置系统命令的输出到变量。s h e l l将反引号中的内容作为一个系统命令,并
执行其内容。使用这种方法可以替换输出为一个变量。反引号可以与引号结合使用。

[root@localhost huangcd]# echo `hello`
bash: hello: command not found
[root@localhost huangcd]# echo `date`
2013年 12月 07日 星期六 10:51:55 CST

[root@localhost huangcd]# date +%A" the "%e" of "%B" "%Y
星期六 the  7 of 十二月 2013

打印当前系统上用户数目:

[root@localhost huangcd]# echo "`who|wc -l`"
2

反斜线:

如果下一个字符有特殊含义,反斜线防止s h e l l误解其含义,即屏蔽其特殊含义。下述字
符包含有特殊意义: & * + ^ $ ` " | ?。

上述语句同样可用于$ $命令, s h e l l解释其为现在进程I D号,使用反斜线屏蔽此意,仅打
印$ $。

[root@localhost huangcd]# echo \*
*
[root@localhost huangcd]# echo $$
4936
[root@localhost huangcd]# echo \$$
$$

在引用时会遇到一些问题且经常出错。我在使用引用时遵循两条规则:
1) 反馈字符串用双引号;但不要引用反馈本身。
2) 如果使用引用得到的结果不理想,再试另一种,毕竟只有三种引用方式,可以充分尝试。

使用命令e x p r时,用*表示乘法会出现错误,在*前加上反斜线才会正确。

[huangcd@localhost ~]$ expr 12*12
12*12
[huangcd@localhost ~]$ expr 12\*12
12*12
[huangcd@localhost ~]$ expr 12 \* 12
144

在e c h o命令中加入元字符,必须用反斜线起屏蔽作用。下面的例子要显示价格$ 1 9 . 9 9。其
中$屏蔽与不屏蔽将产生不同的结果。

[huangcd@localhost ~]$ echo "the price is $19.99"
the price is 9.99
[huangcd@localhost ~]$ echo "the price is \$19.99"
the price is $19.99

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值