LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 714|回复: 3

用引号括起变量的问题(已解决)

[复制链接]
发表于 2005-9-26 11:55:21 | 显示全部楼层 |阅读模式
  1. aif@ubuntu:/tmp$ touch "te st"
  2. aif@ubuntu:/tmp$ ls
  3. te st
  4. aif@ubuntu:/tmp$ RMFILE="te st"
  5. aif@ubuntu:/tmp$ echo $RMFILE
  6. te st
  7. aif@ubuntu:/tmp$ rm $RMFILE
  8. rm: 无法删除‘te’: 没有那个文件或目录
  9. rm: 无法删除‘st’: 没有那个文件或目录
  10. aif@ubuntu:/tmp$ rm "$RMFILE"
  11. aif@ubuntu:/tmp$ ls
  12. aif@ubuntu:/tmp$ echo "$RMFILE"
  13. te st
  14. aif@ubuntu:/tmp$
复制代码


为什么echo "$RMFILE"和$RMFILE的效果一样,用在命令rm中就不一样,还有下面这样也不行
  1. aif@ubuntu:/tmp$ RMFILE='"te st"'
  2. aif@ubuntu:/tmp$ echo $RMFILE
  3. "te st"
  4. aif@ubuntu:/tmp$ rm $RMFILE
  5. rm: 无法删除‘"te’: 没有那个文件或目录
  6. rm: 无法删除‘st"’: 没有那个文件或目录
复制代码
发表于 2005-9-26 12:01:42 | 显示全部楼层
引号防止单词分隔。引号把"te st"看作一个整体,不用引号把它看成两个参数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-26 12:08:13 | 显示全部楼层
Post by firemoth
引号防止单词分隔。引号把"te st"看作一个整体,不用引号把它看成两个参数


这个我当然知道,可是上面的情况还是不能一下子理解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-28 11:06:31 | 显示全部楼层
第1部分问题:
After the preceding expansions, all unquoted occurrences of the characters `\', `'', and `"' that did not result from one of the above expansions are removed.


这是BASH文档上的话,大意是说既不是变量括展结果也不在引号内的一些特殊字符将被除去,而"$RMFILE"和$RMFILE的区别是有没有被分词(见第2部分问题),这是肉眼不可分别的,只有在命令行上才有意义

第2部分问题:

The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting.


这也是BASH文档上的话,大意是说如果变量扩展(变量名替换为它的值)等等不是发生在引号内,BASH会扫描扩展出的字符串并分词,分词依据的是$IFS。也就是说引号只是作为变量扩展的环境时起作用,扩展结果中的引号不影响分词,扩展结果中匹配$IFS的才影响分词
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表