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

浏览:
字体:
发布时间:2013-12-09 23:24:05
来源:
上一章介绍了变量和替换操作,在脚本中执行变量替换时最容易犯的一个错误就是由于

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

这里只讲述引用的基本规则。因为使用引用的例子很多。本书接下来的两个部分将一一
予以讲述。脚本中执行行操作时, 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) 如果使用引用得到的结果不理想,再试另一种,毕竟只有三种引用方式,可以充分尝
试。
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();