linux的命令之shell的单引号和双引号的区别

avatar 2021年8月17日18:28:48 评论 432 次浏览

事情的起因是因为在kubenets中给服务加pinpoint的时候需要获取容器的计算机名来作为pinpoint的ID,因为每个服务的pinpointID不能相同所以在使用的时候必须在docker启动之后在运行命令获取值赋值给变量。然后使用这个变量来启动服务,以达到pinpointID不同的目的。

单引号:所见即所得
双引号:所见非所得,它会先把变量解析之后,再输出
反引号(``) :命令替换,通常用于把命令输出结果传给入变量中
反斜杠( \ ) :转义字符/逃脱字符,Linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号

[wolf@wulaoer.org 🔥🔥🔥🔥 ]$ wulaoer='hostname'
[wolf@wulaoer.org 🔥🔥🔥🔥 ]$ echo $wulaoer
hostname
[wolf@wulaoer.org 🔥🔥🔥🔥 ]$ wulaoer="hostname"
[wolf@wulaoer.org 🔥🔥🔥🔥 ]$ echo $wulaoer
hostname
[wolf@wulaoer.org 🔥🔥🔥🔥 ]$ wulaoer=`hostname`
[wolf@wulaoer.org 🔥🔥🔥🔥 ]$ echo $wulaoer
wulaoer.org

这里说明一下在dockerfile中wulaoer="hostname"就会在没有进入容器直接执行hostname命令,这里明显不是我想要的,我想要的是容器启动之后需要在容器中获取。看到单引号和双引号的说明,那我们可以在第一层的时候不执行命令,在第二层的时候在执行命令。即可得到我们想要的值,下面看一下我的dockerfile

pinpoint_id='`hostname | awk -F '-' '{print $(NF-1)}'`'

这个是我的pinpointID的变量,我执行dockerfile后会生成的容器中查看一下,这里不在叙述结果,本人测试没有问题。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: