shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢相关的知识,希望对你有一定的参考价值。
单引号原样输出,你可以记为“单调输出”,如下原样输出 eval echo a 这个字符串,很单调吧:echo 'eval echo a'
反引号执行内容后输出,可以记为“反译输出”,要把引号中的内容反向翻译一下,如下要执行反绰号中的内容 eval echo a,得到 a,再执行 echo,最终输出 a:
echo `eval echo a`追问
那双引号呢?
追答双引号和单引号差不多,但可以做变量的取值计算,可以记为双方通信,下面做对比:
先赋值 a=123
1) 单引号:单调输出 $a
echo '$a'
2) 双引号:双方通信,接到 a 的电话:"喂你好,我是a,请输出我的值 123",输出 123
echo "$a"
反引号能够将一个命令的标准输出插在一个命令行中任何位置 参考技术B 双引号和单引号区别还是有区别的,别说差不多
(1) 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的(双引号可以)
(2) 单引号字串中不能出现单引号(对单引号使用转义符后也不行)
(3) 对于上一条,双引号可以
(4) 对于命名一个字符串,单引号双引号都可以,甚至可以不加引号
再举个例子吧,比方说预定义了一个变量name=zhangsan
双引号,myname="$name is me"
echo myname 这边输出的是: zhangsan is me
单引号,myname='$name is me'
echo myname 这边输出的是: $name is me
一般来说用双引号,单引号弱爆了
shell脚本单双引号问题描述
工作中常用到shell脚本,遇到了一个疑惑,求解。
常见的解释:
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
我的问题如图一:在vim编辑器中,第21行,在使用单引号的情况下,'$i' 是打印出了数值,不是上面解释的单引号里面的变量是无效的,打印出$i。
图一
与之类似的脚本,用双引号表示: 第18行
6~9四行是str.txt内容(为了观看方便,copy到一起显示)
图二、输出脚本
双引号、单引号、没有引号结果如下图:红圈圈起来的部分。结果是:
双引号括起来的变量,原样输出了图二中的第九行,* 在双引号中不起作用了
单引号确实是任何字符都会原样输出,输出了$word
没有引号,图二中第九行中首字母 * 起作用,输出了这个目录下的内容。
疑惑1:在图一中,单引号中的变量应该无效的但是结果确打印出了值,在图二中就是无效的了,这里是否是因为图一中的单引号用在了awk命令行中。
疑惑2:在图二中,双引号输出和没有引号输出结果,双引号在执行 "$word" 后,打印出 * 17 Procedure Status * ,echo执行时,不是先碰到 * 符号,首先执行吗?为什么这里没有执行呢?不是说双引号中的 可以有变量的吗 ? 这里有一个问题就是 * 符号,在这里解释为是否属于变量将。
任务完成了,但是这个疑惑,就像跟刺一样扎在心里不舒服,求解。
以上是关于shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢的主要内容,如果未能解决你的问题,请参考以下文章