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

目录
相关文章
|
1天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
1天前
|
Shell Linux
【linux课设】自主实现shell命令行解释器
【linux课设】自主实现shell命令行解释器
|
1天前
|
存储 Unix Linux
linux权限管理以及shell
linux权限管理以及shell
|
2天前
|
Shell
shell 单引号和双引号区别
shell 单引号和双引号区别
9 0
|
2天前
|
运维 Linux Shell
day02-Linux运维-系统介绍与环境搭建_硬件 系统核心 解释器shell 外围操作系统
day02-Linux运维-系统介绍与环境搭建_硬件 系统核心 解释器shell 外围操作系统
|
2天前
|
Linux Shell
Linux下su与su -命令的本质区别_6、用su命令和su -切换账户时,两个命令有什么区别 (1)
Linux下su与su -命令的本质区别_6、用su命令和su -切换账户时,两个命令有什么区别 (1)
Linux下su与su -命令的本质区别_6、用su命令和su -切换账户时,两个命令有什么区别 (1)
|
8天前
|
Shell Linux Perl
Linux|如何允许 awk 使用 Shell 变量
Linux|如何允许 awk 使用 Shell 变量
18 2
|
8天前
|
Unix Linux 调度
linux线程与进程的区别及线程的优势
linux线程与进程的区别及线程的优势
|
8天前
|
网络协议 Shell Linux
LabVIEW 在NI Linux实时设备上访问Shell
LabVIEW 在NI Linux实时设备上访问Shell
13 0

热门文章

最新文章