专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>高级Bash脚本编程指南>

5.1 引用变量

百度收藏 QQ搜藏

------------
在一个双引号中直接使用变量名,一般都是没有问题的.它阻止了所有在引号中的特殊字符的
重新解释--包括变量名[2]--但是$,`和\除外.[3]保留$,作为特殊字符的意义,是为了能够在双
引号中也能够正常地引用变量("$var").这样在""中可以使用变量所表达的值(Example 4-1).

使用""来防止单词分割.[4]如果在参数列表中使用双引号,将使得双引号中的参数作为一个参
数.即使双引号中的字符串包含多个单词(也就是包含空白部分),也不会变为多个参数,如:
 1 variable1="a variable containing five words"
 2 COMMAND This is $variable1    # COMMAND将以7个参数来执行
 3 # "This" "is" "a" "variable" "containing" "five" "words"
 4
 5 COMMAND "This is $variable1"  # COMMAND将以1个参数来执行
 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将以3个空参数来执行
13 COMMAND "$variable2 $variable2 $variable2"      # COMMAND将以1个参数来执行(2空格)
 用双引号把参数封到echo中是很有必要的,只有在单词分隔或时保留空白时的时候可能
 有些问题.

Example 5-1 echo一些诡异的变量
################################Start Script#######################################
 1 #!/bin/bash
 2 # weirdvars.sh: echo诡异的变量
 3
 4 var="'(]\\{}\$\""
 5 echo $var        # '(]\{}$"
 6 echo "$var"      # '(]\{}$"    并没有什么不同
 7
 8 echo
 9
10 IFS='\'
11 echo $var        # '(] {}$"     \ 转换成空格了?明显和IFS有关系么!又不傻!
12 echo "$var"      # '(]\{}$"
13
14 exit 0
################################End Script#########################################

单引号操作总体上和""很像,但不允许引用变量.因为$的特殊含义被关闭了.在''中除了',其他
字符都没有特殊的含义了.所以单引号比双引号严格.
 因为即使是\,在''中都被关闭了,所以你想在''中显示'的含义,将得不到预期的效果.
   1 echo "Why can't I write 's between single quotes"
   2
   3 echo
   4
   5 # 一种绕弯的方法
   6 echo 'Why can'\''t I write '"'"'s between single quotes'
   7 #    |-------|  |----------|   |-----------------------|
   8 # 包含了2个单引号字符,原书好像有错误

注意事项:
[1]  除非当前目录下,正好有个叫first的文件.
[2]  即使是变量的值也是有副作用的(见下边)
[3]  如果在""中包含"!"的话,在命令行中将会出现错误.因为这个"!"被当作历史命令来解释了.
  在一个脚本中,这种情况是不会发生的,因为在脚本中,Bash历史记录被关闭了.

  下边是一些关于"\"一些不协调的行为.
  bash$ echo hello\!
  hello!

  bash$ echo "hello\!"
  hello\!

  bash$ echo -e x\ty
  xty

  bash$ echo -e "x\ty"
  x       y

[4]  "单词分隔",在这个上下文中意味着,将一个字符串分隔为一些分离的参数.

上一篇:5. 引用(翻译的可能有问题,特指引号) 下一篇:5.2 转义(\)

power by soyo123 2007-2008