注:为了加深自己的影响,所以抄了一边,具体请看ABS_Guide_cn.pdf
5.1 引用变量
在一个双引号中直接使用变量名,一般都是没有问题的.它阻止了所有在引号中的特殊字符的重新解释--包括变量名[2]--但是$,`和\除外.[3]保留$,作为特殊字符的意义,是为了能够在双引号中也能够正常地引用变量("$var").这样在""中可以使用变量所表达的值.使用""来防止单词分割.[4]如果在参数列表中使用双引号,将使得双引号中的参数作为一个参数.即使双引号中的字符串包含多个单词(也就是包含空白部分),也不会变为多个参数.
variable2="" # 空值
COMMAND $variable2 $variable2 $variable2 # COMMAND 将不带参数执行
COMMAND "$variable2" "$variable2" "$variable2" # COMMAND 将以 3 个空参数来执行
COMMAND "$variable2 $variable2 $variable2" # COMMAND 将以 1 个参数来执行(2 空
单引号操作总体上和""很像,但不允许引用变量.因为$的特殊含义被关闭了.在''中除了',其他字符都没有特殊的含义了.所以单引号比双引号严格.因为即使是\,在''中都被关闭了,所以你想在''中显示'的含义,将得不到预期的效果.
5.2 转义(\)
转义是一种引用单个字符的方法.一个具有特殊含义的字符前边放上一个转义符(\)就告诉 shell这个字符失去了特殊的含义.值得注意的是,在某些特定的命令和工具中,比如 echo 和 sed,转义符往往会起到相反的效果,它反倒有可能引发出这个字符特殊的含义.对于特定的转义符的特殊的含义在 echo 和 sed 中所使用的
\n 意味着新的一行
\r 回车
\t tab 键
\v vertical tab(垂直 tab),查前边的 Ctl-K
\b backspace,查前边的 Ctl-H
\a "alert"(如 beep 或 flash)
\0xx 转换成 8 进制 ASCII 解码,等价于 oxx
\" 表达引号本身
\$ $号本身,跟在\$后的变量名,将不能扩展
\\ \号本身
分配给变量的字符串的元素也会被转义,但是只把一个转义符分配给变量将会报错.例如:
variable=\ ; echo "$variable"
转义一个空格,在命令行参数列表中将会阻止单词分隔问题.
转义符也提供续行功能.一般,每一行都包含一个不同的命令,但如果在行尾加上\,那就会接受新行的输入,作为这一行的补充.
5.1 引用变量
在一个双引号中直接使用变量名,一般都是没有问题的.它阻止了所有在引号中的特殊字符的重新解释--包括变量名[2]--但是$,`和\除外.[3]保留$,作为特殊字符的意义,是为了能够在双引号中也能够正常地引用变量("$var").这样在""中可以使用变量所表达的值.使用""来防止单词分割.[4]如果在参数列表中使用双引号,将使得双引号中的参数作为一个参数.即使双引号中的字符串包含多个单词(也就是包含空白部分),也不会变为多个参数.
variable2="" # 空值
COMMAND $variable2 $variable2 $variable2 # COMMAND 将不带参数执行
COMMAND "$variable2" "$variable2" "$variable2" # COMMAND 将以 3 个空参数来执行
COMMAND "$variable2 $variable2 $variable2" # COMMAND 将以 1 个参数来执行(2 空
单引号操作总体上和""很像,但不允许引用变量.因为$的特殊含义被关闭了.在''中除了',其他字符都没有特殊的含义了.所以单引号比双引号严格.因为即使是\,在''中都被关闭了,所以你想在''中显示'的含义,将得不到预期的效果.
5.2 转义(\)
转义是一种引用单个字符的方法.一个具有特殊含义的字符前边放上一个转义符(\)就告诉 shell这个字符失去了特殊的含义.值得注意的是,在某些特定的命令和工具中,比如 echo 和 sed,转义符往往会起到相反的效果,它反倒有可能引发出这个字符特殊的含义.对于特定的转义符的特殊的含义在 echo 和 sed 中所使用的
\n 意味着新的一行
\r 回车
\t tab 键
\v vertical tab(垂直 tab),查前边的 Ctl-K
\b backspace,查前边的 Ctl-H
\a "alert"(如 beep 或 flash)
\0xx 转换成 8 进制 ASCII 解码,等价于 oxx
\" 表达引号本身
\$ $号本身,跟在\$后的变量名,将不能扩展
\\ \号本身
分配给变量的字符串的元素也会被转义,但是只把一个转义符分配给变量将会报错.例如:
variable=\ ; echo "$variable"
转义一个空格,在命令行参数列表中将会阻止单词分隔问题.
转义符也提供续行功能.一般,每一行都包含一个不同的命令,但如果在行尾加上\,那就会接受新行的输入,作为这一行的补充.