shell中正则表达式换行区别

vers=`(autoconf --version) 2> /dev/null` && expr "$vers" : '[^
]* \([0-9][0-9.]*\).*'

vers=`(autoconf --version) 2> /dev/null` && expr "$vers" : '[^]* \([0-9][0-9.]*\).*'

请问上面两段代码的区别是什么呢?为何会输出不同的结果?

第二段正则是不是少了 \n?

刚刚测试加\n对结果没影响。 代码片段1可以输出版本号,代码片段2无输出

换成 \r 试试。

#+BEGIN_SRC sh :results output
vers=`(autoconf --version) 2> /dev/null` && expr "$vers" : '[^\r]* \([0-9][0-9.]*\).*'
#+END_SRC

#+RESULTS:
: 2.71

嗯嗯,可以了,多谢解答!