linux bash shell 中的单引号和双引号
Posted a1232345
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux bash shell 中的单引号和双引号相关的知识,希望对你有一定的参考价值。
原文地址:http://www.cnblogs.com/fhefh/archive/2011/04/21/2024198.html
当要引用一个变量的值时,一般推荐使用双引号。使用双引号除了变量名[2]前缀($)、后引符(`)和转义符(\\)外,会使shell不再解释引号中其它所有的特殊字符。[3] 用双引号时$仍被当成特殊字符,允许引用一个被双引号引起的变量("$variable"), 那也是说$variable会被它的值所代替。
用双引号还能使句子不被分割开. [4] 一个参数用双引号引起来能使它被看做一个单元,这样即使参数里面包含有空白字符也不会被shell分割开了。
1 variable1="a variable containing five words" 2 COMMAND This is $variable1 # 用下面7个参数执行COMMAND命令: 3 # "This" "is" "a" "variable" "containing" "five" "words" 4 5 COMMAND "This is $variable1" # 用下面1个参数执行COMMAND命令: 6 # "This is a variable containing five words" 7 8 9 variable2="" # 空字符串。 10 11 COMMAND $variable2 $variable2 $variable2 # 没有带参数执行COMMAND 命令 12 COMMAND "$variable2" "$variable2" "$variable2" # 用三个含空字符串的参数执行COMMAND命令 13 COMMAND "$variable2 $variable2 $variable2" # 用一个包含两个空白符的参数执行COMMAND命令 14 15 # Thanks, St閜hane Chazelas. |
在echo语句中,只有句子分割和保存空白符的时候,才需要把参数用双引号引起来。. |
例子 5-1. 引号引起奇怪的变量
1 #!/bin/bash 2 # weirdvars.sh: Echoing weird variables. 3 4 var="'(]\\\\\\$\\"" 5 echo $var # '(]\\$" 6 echo "$var" # '(]\\$" 和上面一句没什么不同. 7 8 echo 9 10 IFS='\\' 11 echo $var # '(] $" \\字符被空白符替换了,为什么? 12 echo "$var" # '(]\\$" 13 14 # 以上例子由Stephane Chazelas提供.. 15 16 exit 0 |
单引号(' ')和双引号类似,但它不允许解释变量引用,因此,在单引号内的字符$的特殊意思无效了。在单引号内,除了字符',每个特殊字符都只是字面的意思。单引号(全局引用)比双引号(部分引用)更严格的处理引用部分。
由于在单引号里的转义字符(\\)也只是被局限于字面上的意思,所以想在一双单引号里再加单引号是不行的。
|
注:
[1] | 除非当前目录下有一个文件名为first的文件。那这是引用的另外一个不同的理由了。(多谢 Harald Koenig指出这一点) | |
[2] | 这也会使变量的值会有副作用。(看下面的) | |
[3] | 在命令行上,把感叹号"!"放在双引号里执行命令会出错(译者注:比如说:echo "hello!"). 因为感叹号被解释成了一个历史命令. 然而在一个脚本文件里,这么写则是正确的,因为在脚本文件里Bash的历史机制被禁用了。 在双号号里在字符"\\"也会引起许多不一致的行为。
(多谢Wayne Pollock指出这一点) | |
[4] | 句子的分割,在这里是指分割一个字符串为许多不连续的单独的参数。 |
PS:
使用单引号可以阻止shell解释器编辑指令中的特殊字符或空格(shell使用空格决定提交给程序的独立的参数,特殊的shell字符在调用之前被展开)
Have a nice day!!!以上是关于linux bash shell 中的单引号和双引号的主要内容,如果未能解决你的问题,请参考以下文章