shell 脚本编程之引用
来源:互联网 发布:淘宝小二误判如何申诉 编辑:程序博客网 时间:2024/05/18 20:52
四种引用符
shell 中字符分为两种,一种是普通字符,另一种是元字符(meta)。元字符是 shell 的保留字符,在 shell 中有着特殊的意义。引用是指将字符串用某种符号括起来,以防止特殊字符被解析成其它意思。shell 中有四种引用符,用双引号,单引号,反引号和转义字符。
转义字符 \
特殊字符无法直接输出,因为特殊字符会被解析成其特殊意义。比如要打印美元符号 $
[ljx@localhost ~]$ echo $177[ljx@localhost ~]$ echo \$17$17
第一条命令,$ 符号被解析成取变量的值,$1 取的是脚本的第一个参数,因为这里并没有执行脚本,所以 $1 的值为空,最后输出的结果是7。正确的写法是第二条命令,使用转义字符 \ 来使特殊字符显示为字符本身。
除了 $ 符号,双引号、单引号,反引号,星号,百分号,问号,感叹号,分号,转义符号,各种括号等等都是特殊字符,要使它们显示为字面的符号,就需要在前面加上转义字符 \。
部分引用 “
转义字符可以阻止单个字符被解析成特殊意义,但如果是字符串的话可以使用其它的引用方式。使用双引号括起来的引用称为部分引用,又叫弱引用;顾名思义就是不是完全的引用。使用双引号括起来的引用,$符,`符和 \ 符仍会被解析成特殊意义,其它字符都会被解析成字面意义。
[ljx@localhost ~]$ var="a b c"[ljx@localhost ~]$ echo $vara b c[ljx@localhost ~]$ echo "$var"a b c
可以看到,使用双引用括起来之后,$ 符号仍被解析为取变量的值。当变量的值中有连续多个空格时,直接输出变量的值只会多个空格中的一个,如果想保留所有的空格,就需要使用引用的方式。
全引用 ‘
使用单引号括起来的引用称为全引用,又叫强引用;顾名思义就是完全的引用。包括 $符,` 符,\ 符在内的所有特殊字符都会被解析成字面意思。单引号引用内不能再出现单引号,因为这样引号配对就乱了,用转义字符来转义单引号也不行,因为转义字符在单引号引用内被解析成普通字符,转义工作无法正常进行。
[ljx@localhost ~]$ echo '$PWD'$PWD[ljx@localhost ~]$ echo "$PWD"/d/learn/shell[ljx@localhost ~]$ echo 'It's a dog'> 'Its a dog[ljx@localhost ~]$ echo "It's a dog"It's a dog[ljx@localhost ~]$ echo It\'s a dogIt's a dog
使用单引号引用时,$ 被解析成普通字符,所以输出结果为 $PWD
,使用双引号引用时,$ 仍被解析成取变量值,所以输出结果为 /d/learn/shell
。使用单引号引用将 It's a dog
括起来,字符串中的单引号与第一个单引号配对了,所以就剩下了一个单引号没法配对;当按下回车时命令并没有执行,而是继续等待输入,继续输入一个单引号,命令才执行,输出结果为 Its a dog
,中间的单引号被解析成引用了。正确的写法是后面那两种写法。
命令替换 `
命令替换是指将系统命令的标准输出作为值赋给变量,使用反引号 ` 括起来的引用就是命令替换。除了反引号之外,还可以使用 $()。两者的功能是等价的,但使用 $() 比 ` 会好点;一方面,反引号和单引号看起来太像了,难以区分;另一方面,$() 支持嵌套,而 ` 不支持。但是,$() 只有在 bash 中才有效,而 ` 在所有 unix shell 中都有效,因此反引号更加普遍。
[ljx@localhost ~]$ date1=`date`[ljx@localhost ~]$ date2=$(date)[ljx@localhost ~]$ echo $date1 $date22017年07月31日 15:34:56 2017年07月31日 15:35:02
- shell 脚本编程之引用
- Shell脚本编程-引用
- Shell编程之参数引用
- Shell编程之 脚本语法
- shell脚本编程之基础
- shell脚本编程之awk
- shell脚本编程之变量
- Shell脚本编程之函数
- Shell脚本编程之引号
- shell 脚本编程之变量
- shell 脚本编程之函数
- Shell编程之变量赋值和引用
- Shell编程之变量赋值和引用
- Shell编程之变量赋值和引用
- 高级Bash脚本编程指南(4):shell中的引用
- shell脚本中的引用
- Shell编程之脚本参数传递笔记
- linux之shell编程启动脚本
- ES2016 新特性:求幂运算符(**)
- 字符串匹配的KMP算法
- 微信小程序配置服务器信息
- HMACSHA1加密
- 浙大版《C语言程序设计(第3版)》题目集前四章总结
- shell 脚本编程之引用
- java中如何调用Shell脚本文件
- gradle
- 浅谈hadoop个组件
- spring boot之拦截器
- 第一天有利网的工作(python安全开发)
- uitexture实现新手引导遮罩等
- 如何使用函数公式来查找图片
- 独木舟上的旅行