昨天尝试在autoconf中用sed提取php-config中的一个参数,在shell里面很简单:
php-config --configure-options | sed -n 's|.*--with-config-file-scan-dir=\([^ ]*\).*|\1|p'
可是在configure.ac中,这样写是不行的:
PHPCDIR=`php-config --configure-options | sed -n 's|.*--with-config-file-scan-dir=\([^ ]*\).*|\1|p'` AC_SUBST([PHPCDIR])
我研究了一天没想明白,就到autoconf的maillist去问了。今天收到到一大堆回复,各种各样的解决方案。
Eric Blake 建议我把这个语句放在set -vx/set +vx中,我发现了问题所在:sed中的方括号[]被m4吃掉了。甚至还收到了autobook作者Gary V. Vaughan的回复。
解决方案包括:
1.重复方括号,也就是把[^ ]改成[[^ ]];
2.使用四元组代替方括号,见http://cims.nyu.edu/cgi-systems/info2html?%28autoconf%29Quadrigraphs
3.把这个语句放在一个方括号包括的语句块中。
邮件地址在:http://lists.gnu.org/archive/html/autoconf/2011-02/msg00055.html
PS:我在看autoconf的tutorial的时候,好像确实看到过m4会吃掉方括号,但是根本不会放在心上,只有遇到问题才会映象深刻,这确实是个问题。