2012年(51)
分类:
2012-03-05 22:35:06
原文地址:shell中的引用 作者:g_programming
shell中的引用
引用是用来防止shell将某些你想要的参数解释成不同的意义。举例来说如果你要命令接受含有元字符的参数,如*或者?,
现在我所知道的有特殊意义的字符: & * + ^ $ ` " | ? ' \
就必须要将这些元字符用引号引用起来,或者更典型的情况是:你希望将某些可能被shell视为个别参数的东西保持为单个参数,这时你必须将其引用,下面是引用的三种方式:
1、 反斜杠转义
字符前置反斜杠(\),用来告知shell该字符即为其字面上的意思,这是引用单一字符的最简单的方式:
$ echo here is a real star : \* and a real question mark: \?
$here is a real star : * and a real question mark: ?
2、 单引号
(1)单引号强制shell将一对引号之间的所有字符都看作其字面上的意义,shell脚本会删除这两个引号,只留下单独被括起来的完整文字内容:
$echo ‘here are some metacharacters: * ? [abc] ` $ \’
$here are some metacharacters: * ? [abc] ` $ \
(2)不可以在一个单引号引用的字符串里再内嵌一个单引号,即便是反斜杠在单引号里面都没有特殊意义。如需要混用单引号和双引号,你可以小心地使用反斜杠转义以及不同引用字符串的连接做到。
3、 双引号
(1)双引号就像单引号那样,将括起来的文字视为单一的字符串,只不过双引号会确切地处理括起来文字中的转义字符和变量、算术、命令替换。
$x=”I am x”
$echo “\$ x is \”$x\”. Here is some output: ‘$(echo Hello World)’”
$$x is ” I am x”. Here is some output: ‘Hello World’
(2)在双引号里面,字符$、”、`和\,如需要用到字面上的意义就必须要前置转义字符\。任何其他字符前面的反斜杠是不带有特殊意义的。序列\-newline会完全地删除,就好像用在脚本的正文中一样,单引号在双引号里面没有特殊意义,如果你想要将一个变量值与另外一个变量值连接到一起:
$oldvar=”$oldvar $newvar”