全部博文(48)
分类: Python/Ruby
2009-09-01 22:49:10
特殊字符分类: re的meta会和shell的meta还有wildcard 相同,所以要转义,即使用引用; 引用 (单引号、双引号、反斜线) * hard quote:' ' (单引号),凡在hard quote中的所有meta均被关闭。 * escape:\(反斜线),只有紧接在escape (跳脱字符)之后的单一meta才被关闭。 1.引用的作用就是保护字符串中的特殊字符不被shell或者shell脚本重新解释, 或者扩展. grep '[Ff]irst' *.txt OR grep “[Ff]irst” *.txt 注:awk ,sed,grep 的单引号问题,可以用双引号吗,可以都不用吗
? 总的来说,正是因为shell中的meta、wildcard有时会和command中的自定义的meta和RE中的meta相同,为了让command中的meta不被shell解析以至于改变,就必须用shell quoting(单引号,双引号,反斜线)来保证其文字不变性。 So最好用单引号括起,因为凡在hard quote中的所有meta均被关闭。 3.引用还可以改掉echo's不换行的"毛病". bash$ echo $(ls -l) l 在echo语句中, 只有在单词分割(word splitting)或者需要保留空白的时候, 才需要把参数用双引号括起来. eg $ echo
xx xxx xx xxx $ echo
"xx xxx" xx xxx l COMMAND $variable2 $variable2
$variable2 # COMMAND将不带参数执行. 特定的转义符的特殊的含义,echo和sed命令中使用: 4.2 \的行为依赖于它自身是否被转义, 被引用(""), 或者是否出现在命令替换或here document中. # 如果使用$'\X'结构,那-e选项就不必要了. 4.4 赋值给变量的字符串的元素也会被转义, 但是不能把一个单独的转义符(一个"裸体的"转义符)赋值给变量. variable=\\ variable=\\\ 4.5 转义符也提供续行功能, 也就是编写多行命令的功能. 一般的, 每一个单独行都包含一个不同的命令, 但是每行结尾的转义符都会转义换行符, 这样下一行会与上一行一起形成一个命令序列. 这时候 \起的是什么作用呢,是转义还是转义符的特殊的含义 。 http://blog.csdn.net/chen_dx/archive/2008/05/20/2463495.aspx
* soft quote:" " (双引号),在soft quoe中大部份meta都会被关闭,但某些则保留(如$,反引号,反斜杠)。
2. 引用的一个重要作用就是保护命令行参数不被shell解释, 但是还是能够让正在调用的程序来扩展它(某些程序和工具能够重新解释或者扩展被引用的特殊字符.)
total 8 -rw-rw-r-- 1 bozo bozo 130 Aug 21 12:57 t222.sh -rw-rw-r-- 1 bozo bozo
78 Aug 21 12:57 t71.sh
bash$ echo "$(ls -l)"
total 8
-rw-rw-r-- 1 bozo bozo 130 Aug 21 12:57 t222.sh
-rw-rw-r-- 1 bozo bozo 78 Aug 21 12:57 t71.sh
注:
COMMAND "$variable2" "$variable2"
"$variable2" # COMMAND将以3个空参数来执行.
COMMAND "$variable2 $variable2
$variable2" # COMMAND将以1个参数来执行(2空格).
4.转义:转义是一种引用单个字符的方法. 一个前面放上转义符 (\)的字符就是告诉shell这个字符按照字面的意思进行解释, 换句话说, 就是这个字符失去了它的特殊含义.
4.1在某些特定的命令和工具中, 比如echo和sed, 转义符往往会起到相反效果 - 它反倒可能会引发出这个字符的特殊含义.
\n 表示新的一行
\r 表示回车
\t 表示水平制表符
\v 表示垂直制表符
\b 表示后退符
\a 表示"alert"(蜂鸣或者闪烁)
\0xx 转换为八进制的ASCII码
4.3 $' '字符串 ????
echo; echo "NEWLINE AND BEEP"
echo
$'\n' # 新行.
echo
$'\a' # 警告(蜂鸣).
echo
"$variable" # \
echo "$variable"
# 不能正常运行 - 报错: