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在本地扩展

目录
相关文章
|
9月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
9月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
806 9
|
9月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
838 2
|
11月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1227 1
|
10月前
|
存储 Ubuntu 安全
Linux中Centos和Ubuntu的区别
CentOS主要面向服务器环境,而Ubuntu适用于服务器和桌面环境。   CentOS提供更精简的安装,而Ubuntu提供更广泛的开箱即用功能。   CentOS遵循RHEL的所有安全实践,而Ubuntu在安全方面采取更积极的方法。
|
10月前
|
Ubuntu 安全 Unix
Linux和Ubuntu有什么区别
综上所述,Linux和Ubuntu之间存在明显的区别。Linux是一种操作系统内核,而Ubuntu是基于Linux内核的发行版本,具有更好的易用性、社区支持和软件仓库。用户可以根据自己的需求选择不同的Linux发行版本,如果需要一个稳定、易于使用的桌面环境,Ubuntu是一个不错的选择。如果需要更加灵活和定制性强的系统,其他Linux发行版本可能更加适合。
|
11月前
|
安全 Unix Java
linux中kill -9和kill -15区别
在 Linux/Unix 系统中,`kill -9` 和 `kill -15` 是终止进程的常用命令,核心区别在于发送的信号类型不同,导致进程终止行为截然不同。`kill -15`(SIGTERM)允许进程进行清理操作后优雅退出,适用于正常关闭;而 `kill -9`(SIGKILL)则强制终止进程,不给予任何清理机会,仅在进程无响应时使用。本文从信号类型、行为、工作原理及使用建议等方面进行详细对比,帮助你更安全、有效地管理进程。
1554 0
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
2061 25
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
325 18
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
385 4

热门文章

最新文章