关于shell的单引号和双引号转义 以及特殊符号相关

摘要:
区别在于双引号不像单引号那样严格。单引号用特殊效果关闭所有字符,而双引号只要求外壳忽略其中的大部分字符。具体而言,以下符号仍在双引号中工作:① 美元符号$在双引号中,仍然可以执行变量替换;② 反撇号`③ 反斜杠,三个特殊字符不被忽略;不忽略美元符号意味着shell还会替换双引号内的变量名。防止shell替换变量和解释特殊字符;在后一种情况下,单引号是转义字符,类似于反斜杠。

关于shell的单引号和双引号转义 以及特殊符号相关
20140603 Chenxin
shell转义,单引号与双引号,反撇号
1、转义
单引号和双引号都能关闭shell对特殊字符的处理。
不同的是,双引号没有单引号严格,单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是以下符号在双引号内仍起效果:
①美元符号 $ 在双引号内,仍然可以进行变量替换
②反撇号 `
③反斜杠
这3种特殊字符不被忽略;不忽略美元符号意味着shell在双引号内部也进行变量名替换。

1)单引号
硬转义,单引号内的字符就是其字面意义。阻止shell进行变量替换和解释特殊字符;对于后一种情况,单引号就是个转义字符,类似于反斜线。

2)双引号
会进行变量替换;将整个字符串解释为一个整体,即使参数里面含有空白字符也不会被shell分割开

3)反撇号`,相当于$()--命令替换
会把命令执行的输出,替换;相当于函数调用,嵌套的变量会一直解析
① 把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套
② 反撇号内不能再引用反撇号,而$()中可以引用反撇号
③ 要把$()引用命令与${}引用变量区分开来

4)反斜线
用作转义字符,阻止shell将后续字符解释成特殊字符

2、示例

1)****/home/edwardlewis/altraman # echo 'date'
date
****:/home/edwardlewis/altraman # echo "date"
date
****:/home/edwardlewis/altraman # echo date
Fri Aug 19 07:00:02 CST 2011

2)在脚本中:
a)newname=1.log_date +%Y-%m-%d-%H-%M
会输出:1.log_2011-10-13-21-27
b)tme=move_data.log_'date +%Y-%m-%d-%H-%M'
echo ${tme}
输出为:1.log_date +%Y-%m-%d-%H-%M
c)tme=move_data.log_"date +%Y-%m-%d-%H-%M"
echo ${tme}
输出为:1.log_date +%Y-%m-%d-%H-%M

3、其他[3]
1)command line的每一个charactor,分为如下两种:
*literal:普通纯文字,对shell 来说没特殊功能
*meta:对shell来说,具有特定功能的特殊保留字符
① IFS:由三者之一组成,用来拆解 command line的每一个词(word),因为command line 是按词来处理的。
② CR:由产生。CR 用来结束 command line
③ =:设定变量。
④ $:作变量或运算替换
⑤ >:重导向 stdout
⑥ <:重导向 stdin
⑦ |:管道
⑧ &:后台运行。
⑨ ():将其内的命令置于 嵌套子shell中执行,或用于运算或命令替换。
⑩ {}:将其内的命令置于non-named function中执行,或用在变量替换的界定范围
11 ;:在前一个命令结束时,忽略其返回值,继续执行下一个命令
12 &&:在前一个命令结束时,若返回值为 true,继续执行下一个命令
13 ||:在前一个命令结束时,若返回值为false,继续执行下一个命令。
14 !:执行 history 列表中的命令
2)假如需要在command line中将这些保留字符的功能关闭,就需要quoting处理。在bash中,常用的quoting 有三种方法:
① hard quote:' ' (单引号),在 hard quote 中的所有meta 均被关闭
② soft quote:" " (双引号),在soft quoe 中大部份meta都会被关闭,除$,`,。
③ escape: (反斜线),紧接 escape之后的单一meta被关闭

免责声明:文章转载自《关于shell的单引号和双引号转义 以及特殊符号相关》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇1.iptables概念【阿里云IoT+YF3300】5. Alink物模型之服务下发下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#汉字转为Unicode编码

主要用于生成json格式时,将汉字转成Unicoude编码,防止页面乱码。   protected string GetUnicode(string text) { string result = ""; for (int i = 0; i < text.Length; i++) {...

C11中的Unicode

在C11(ISO/IEC 9899:2011)标准中引入了对UTF8、UTF16以及UTF32字符编码的支持。 其中,UTF8字符直接通过char来定义,字面量前缀使用u8。比如: char c = u8'你'; const char *s = u8"你好"; 而UTF16字符直接通过char16_t来定义,字面量前缀使用u。比如: #include &...

关于Delphi中的字符串的浅析(瓢虫大作,里面有内存错误的举例)

关于Delphi中的字符串的浅析 只是浅浅的解析下,让大家可以快速的理解字符串。 其中的所有代码均在Delphi7下测试通过。 Delphi 4,5,6,7中有字符串类型包括了: 短字符串(Short String) 长字符串(Long String) 宽字符串(Wide String) 零结尾字符串(Null-Terminated String)、P...

Firebird数据库自动备份脚本

cd C:\Program Files\Firebird\Firebird_2_5\bingbak.exe -USER "sysdba" -PAS "masterkey"  -B  C:\BM.FDB  C:\dbbak\BM%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2...

PLsql/Oracle数据库中没有scott账户,如何创建并解锁

当然首先要装好Oracle 11g 然后还要有sqlplus,这个在Oracle11g的时候应该都会配上的 进入正题,如果oracle/plsql没scott账户,如何创建 先找到Oracle安装目录下的soctt.sql 我的是在: E:app91959product11.2.0dbhome_1admin 如果没有soctt.sql,先建立一个txt文件...

linux下使用find xargs grep查找文件及文件内容

1,在某个路径下查文件。 在/etc下查找“*.log”的文件 find /etc -name “*.log” 2,扩展,列出某个路径下所有文件,包括子目录。 find /etc -name “*” 3,在某个路径下查找所有包含“hello abcserver”字符串的文件。 find /etc -name “*” | xargs grep “...