引号带来的一个问题

可能你也发现了,不少/etc 下面的配置文件其实就是 bash 脚本,用到它们的bash程序都是直接source进来的。这种情况下没什么问题。可以如果你不是source进行来的配置文件,因为格式的原因,而是一行一行read进来的,那就可能有问题了。我们的配置文件格式如下:

OPTION VALUE

直接read一般不会有问题,可有一种情况很特殊,那就是当某个option接受字符串值的时候。字符串值要是不允许带引号吧,可值中有空格就不好办了,虽然read可以处理,但配置文件读起来很奇怪。值要是带引号吧,嘿嘿,read又不好办了,因为引号本身不是值的一部分。这时候你可能会想用sed把引号去掉,仔细一想这个方法行不通,因为引号的情况完全比你想象得要复杂,不信你试试。我的解决方法是用eval:OPTION=eval echo $VALUE,让bash自己处理这该死的引号去好了!