linux shell中‘‘,““和``的区别

简介: 在使用shell脚本编程中,经常会遇到单引号、双引号、以及反单引号,这三者有何区别?

在使用shell脚本编程中,经常会遇到单引号、双引号、以及反单引号,这三者有何区别?

一、双引号


shell会对前缀为$的变量进行自动扩展

双引号的一般出现在含有空格的变量中,请看下例

$ echo $my_variable
$ my_variable=Hello
$
$ echo $my_variable
Hello

非常简单!现在每次引用my_variable 环境变量的值,只要通过$my_variable引用即可。

如果要给变量赋一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。

$ my_variable=Hello World
-bash: World: command not found
$
$ my_variable="Hello World"
$
$ echo $my_variable
Hello World
$

没有双引号的话, bash shell会以为下一个词是另一个要执行的命令。注意,你定义的局部环

境变量用的是小写字母,而到目前为止你所看到的***系统环境变量都是大写字母。***


这里使用单引号同样可行

]#t='hellp world'
]#echo $t
hellp world

echo命令可用单引号或双引号来划定文本字符串

]#echo this is a test
this is a test
]#echo Let's see if this'll work
Lets see if thisll work

如何解决?

如果在字符串中用到了它们,你需要在

文本中使用中一种引号,而用另外一种来将字符串划定起来

]#echo "Let's see if this'll work"
Let's see if this'll work
]#echo 'Let's see if this'll work'
Lets see if thisll work

再来看一个例子

$ cat test1
#!/bin/bash
#This script displays the date and who's logged on
echo The time and date are:
date
echo "Let's see who's logged into the system:"
who
$

如果想把文本字符串和命令输出显示在同一行中,可以用echo语句

的-n参数。

脱义


比如在bash中这样定义str=this is String,这样就会报错,为了避免出错就得使用 单引号’‘和双引号""。

单引号’’,双引号""的区别

  • 单引号’‘剥夺了所有字符的特殊含义,单引号’'内就变成了单纯的字符。
  • 双引号"“则对于双引号”"内的参数替换($)和命令替换(``)是个例外。

二、反单引号


反引号是命令替换,命令替换是指Shell可以先执行中的命令,将输出结果暂时保存,在适当的地方输出

反单引号的作用是可以从命令输出中提取信息,并将其赋给变量。把输出赋

给变量之后,就可以随意在脚本中使用了。这个特性在处理脚本数据时尤为方便。

有两种方法可以将命令输出赋给变量:

 反引号字符( `)

 $()格式

提示:在美式键盘上,它通常和波浪线( ~)位于同一键位

通过命令替换获得当前日期并用它来生成唯一文件名


#!/bin/bash
# copy the /usr/bin directory listing to a log file
today=$(date +%y%m%d)
ls /usr/bin -al > log.$today

命令替换会创建一个***子shell来运行对应的命令***。子shell( subshell)是由运行该脚本的shell

所创建出来的一个独立的子shell( child shell)。正因如此,===由该子shell所执行命令是无法使用脚本中所创建的变量的。***===这点要特别注意

在命令行提示符下***使用路径./运行命令的话,也会创建出子shell;要是运行命令的时候

不加入路径,就不会创建子shell。如果你使用的是内建的shell命令,并不会涉及子shell。

在命令行提示符下运行脚本时一定要留心!

三、单引号


用单引号引起来的所有内容都解释为字符串文字

在ssh远程执行命令的时候经常会遇到这个问题:

在远程主机上定义一个变量,在ssh 登录上去时想使用这个变量。该如何做?

看下面这个例子

[(TEST AP)root@test /tmp]#A=3
[(TEST AP)root@test /tmp]#
[(TEST AP)root@test /tmp]#echo $A
3
[(TEST AP)root@test /tmp]#
[(TEST AP)root@test /tmp]#
[(TEST AP)root@test /tmp]#
[(TEST AP)root@test /tmp]#echo $A
3
[(TEST AP)root@test /tmp]#ssh 192.168.10.204 'B=3; echo "A=$A"; echo "B=$B";'
A=
B=3
[(TEST AP)root@test /tmp]#                                   
[(TEST AP)root@test /tmp]#ssh 192.168.10.204 "B=3; echo "A=$A"; echo "B=$B";"
A=3
B=

如何把A和B 同时打印出来呢?

[(TEST AP)root@test /tmp]#ssh 192.168.10.204 "B=3; echo "A=$A"; echo "B=\$B";"
A=3
B=3

$意思是按$字面意义解释字符,因此我们按字面意义发送echo $B作为远程执行指令之一,而不是先让bash $B在本地扩展

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
70 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
2月前
|
Shell Docker 容器
使用exec模式与shell模式,执行ENTRYPOINT和CMD的区别
结合 `exec`与 `shell`模式,`ENTRYPOINT`与 `CMD`在Docker容器启动时的交互方式展现出不同的特点。选择哪种模式,取决于对执行环境的纯净度、性能需求以及是否需要利用shell特性。理解这些细微差别,有助于更精细地控制容器的行为,优化应用部署与管理流程。
99 0
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
604 2
|
3月前
|
监控 Linux
Linux系统中du命令与df命令的区别与用法
总的来说,`du` 和 `df` 在磁盘管理中互补使用,能够提供全面的磁盘空间使用信息,帮助用户和管理员有效地监控和管理系统资源。
85 3
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
31 0
|
2月前
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
185 0