引号引起奇怪的变量

本帖最后由 lionfun 于 2011-06-06 13:30 编辑
  1. #!/bin/bash
  2. var="'(]\\{}\$\""
  3. echo $var          # '(]\{}$"
  4. echo "$var"      # '(]\{}$"     和上面一句没什么不同.
  5. echo
  6. IFS='\'
  7. echo $var          # '(] {}$"     \字符被空白符替换了,为什么?
  8. echo "$var"       # '(]\{}$"
  9. exit 0
复制代码
补充两个脚本如下:
  1. #!/bin/bash
  2. IFS=a
  3. a='caaaacccssbddddsd'
  4. for c in "$a" ;do
  5.   echo $c
  6. done
复制代码
结果为:
c----cccssbddddsd(有4个空白字符)
(注 -表示為空白)
  1. #!/bin/bash
  2. IFS=a
  3. a='caaaacccssbddddsd'
  4. for c in $a ;do
  5.   echo $c
  6. done
复制代码
结果为:
c
-------------------------空白列
-------------------------空白列
-------------------------空白列(共三行)
cccssbddddsd

作者: lionfun   发布时间: 2011-06-06

http://bash.cyberciti.biz/guide/$IFS

http://scmbob.org/can_u_comprehend_it.html

作者: xiaopan3322   发布时间: 2011-06-06

本帖最后由 hackooo 于 2011-06-06 13:50 编辑

lz,我也刚学几天,刚看到IFS这东东,
看看下面这个对你有没帮助:
在shell 完成参数变换和命令置换之后,对命令行中包含在IFS变量内的字符进行词法分析,这时,除非被引号引进来,多余的空格、制表符及换行符都被消除。并且明显的(没有引号的)空自变量也被消除。

你如果把IFS改变了,那没有被引号引进来的变量,里面的字符如果在IFS里,就会被消除,我的理解,不知道有没错误,呵呵
但是关于那个for循环里的那个,我就不清楚,发了贴问了,被楼上老兄说是13问:curse:

作者: hackooo   发布时间: 2011-06-06