折腾

everything about EP (Engineering Productivity)
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

高级bash脚本编程指南-读书笔记三(基础-引用)

Posted on 2011-05-29 21:35  QualitySong  阅读(409)  评论(0)    收藏  举报

引用:字面意思就是将字符串用双引号括起来,保护字符串的特殊字符不被shell解释

引用的一个重要作用就是保护命令行参数不被shell解释

引用可以改掉echo's不换行的"毛病"。

echo $(ls -l) #结果不换行

echo "$(ls -l)" #结果换行

5.1 引用变量

双引号:

双引号中$, `(后置引用),\(转义字符)会继续起作用,而其他特殊字符将不会生效。

使用双引号,可以阻止单词分割。书上下面这个例子,可以解释双引号在控制命令参数中的作用

variable1="a variable containing five words"
COMMAND This is $variable1 # 用下面7个参数执行COMMAND命令:
# "This" "is" "a" "variable" "containing" "five" "words"
COMMAND "This is $variable1" # 用下面1个参数执行COMMAND命令:
# "This is a variable containing five words"

variable2="" # Empty.
COMMAND $variable2 $variable2 $variable2 # COMMAND将不带参数执行.
COMMAND "$variable2" "$variable2" "$variable2" # COMMAND将以3个空参数来执行.
COMMAND "$variable2 $variable2 $variable2" # COMMAND将以1个参数来执行(2空格).

双引号中使用”\”也可能会出现一些不一致的行为,这个很恶心,我想不用每种都记住,只要记住一种正确的方式就行了

bash$ echo hello\!
hello!
bash$ echo "hello\!"
hello\!
bash$ echo -e x\ty
xty
bash$ echo -e "x\ty"
x	y

单引号:

单引号是全引用, 所有特殊字符都不会被解释,包括$,`,\。

5.2 转义

一个前面放上转义符 (\)的字符就是告诉shell这个字符按照字面的意思进行解释。

特定的转义符的特殊的含义,echo和sed命令中使用

\n 新行

\r 回车

\t 水平制表符

\v 垂直制表符

\b 后退符号

\a alert

\0xx 转换为8进制ASCII码

转义符也提供续行功能, 也就是编写多行命令的功能,是每行结尾的转义符都会转义换行符, 这样下一行会与上一行一起形成一个命令序列

如果一个脚本以|结束, 管道符, 那么就不用非的加上转义符\了. 但是一个好的编程风格还是应该在行尾加上转义符