文章目录
引用
单引号’
双引号”
反斜线
反引号`
引用
在第五章中讲到shell中的引用,shell能识别到4种不同的引用字符:
单引号’
双引号”
反斜线
反引号`
前两种和最后一种必须成对出现,而反斜线可以在命令中根据需要多次出现,这些引用字符在shell中的含义和功能各不相同。
单引号’
shell碰到第一个’,在遇到用于封闭的’之前,shell会忽略单引号对中引用的所有特殊字符,即不再解释字符串中任何特殊字符,对内容的保护比较强,单引号最常见的地方就是一个字符串参数中含有空格时,shell通常会使用空格作为分割符,将一个字符串解释成了多个字符串参数,如下例:
$ echo one teo three four
one teo three four
$ echo ‘one teo three four’
one teo three four
1
2
3
4
双引号”
双引号的作用类似于单引号,除了对于内容的保护要弱于后者,双引号会忽略引用的大部分特殊字符。具体来说,下面3个字符在双引号中不会被忽略:
美元符号 $
反引号 `
反斜线
touch file{01..10}
filelist=*
echo $filelist
file01 file02 file03 file04 file05 file06 file07 file08 file09 file10
echo ‘$filelist’
$filelist
echo “$filelist”
*
1
2
3
4
5
6
7
8
上面的例子中对比了不使用引号,使用单引号以及使用双引号之间的主要不同,在第3行中shell看到了星号并将其替换成当前目录下的所有文件名, 在第5行中,shell完全不处理单引号中的字符,因此显示出了” f i l e l i s t ” , 在 第 7 行 中 双 引 号 指 示 s h e l l 需 要 在 其 中 执 行 变 量 名 替 换 , 因 此 s h e l l 将 ” filelist”, 在第7行中双引号指示shell需要在其中执行变量名替换,因此shell将” filelist”,在第7行中双引号指示shell需要在其中执行变量名替换,因此shell将”filelist”解释为””,因为文件名不会再双引号中完成,所以被只有””被传递给了echo。
当字符串中含有单引号或双引号时,可以使用双引号来保留单引号,反之亦然。
x=” hello, ‘world'”
echo $x
hello, ‘world’
y=’ hello, “world”‘
echo $y
hello, “world”
1
2
3
4
5
6
反斜线
除了少数几处例外,反斜线(作为前缀使用)在功能上相当于在单个字符周围放置单引号,反斜线可以对紧随其后的字符进行转义。
echo >
-bash: syntax error near unexpected token `newline’
echo >
x=*
echo $x
$x
1
2
3
4
5
6
7
如上,shell忽略了反斜线之后的>和$x,所以不在执行变量替换。
当反斜线作为一行最后一个字符时,shell将其视为续行符,会删除随后的换行符,也不会将该换行符作为参数分隔符(假装这个字符没出现过)。在输入跨多行的长命令时经常用这种方法。
$ echo “1234
5678
90″
1234567890
1
2
3
4
值得注意的是反斜线的作用在双引号中也是有效的,但在单引号中被作为普通字符处理
反引号`
反引号不像之前碰到的那些引号,因为它的功能和用法和前面那三种完全不同。反引号用于告诉shell将其中的命令使用命令输出代替, shell会先执行反引号或者 ( ) 中 的 指 令 , 将 输 出 插 入 到 对 应 的 位 置 中 。 反 引 号 和 ()中的指令,将输出插入到对应的位置中。反引号和 ()中的指令,将输出插入到对应的位置中。反引号和(…)在功能上是一样的,只是$(…)是一种更新更可取的命令替换写法。反引号的一般使用格式为:
command
1
echo The date and time is: date
The date and time is: Sun Jan 5 15:17:27 CST 2020
echo The date and time is: $(date)
The date and time is: Sun Jan 5 15:17:39 CST 2020
1
2
3
4
name=”AbcDefg”
转化为大写
name=$(echo $name | tr ‘[a-z]’ ‘A-Z’)
echo $name
ACDDFGH
最新评论