我正在两台不同的机器上处理一个项目 - 一台运行 Mac OSX 10.8.3,另一台运行 Red Hat Enterprise Linux。在我的 Mac 上,我可以这样做:
vim $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
一切正常。在 Linux 机器上,它失败了。所有这些都完全按照我的预期工作:
ls -R */*.@(h|cpp) */*/*.@(h|cpp)
echo $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
export myfilelist=$(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
echo $myfilelist
但
vim $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
产生一组损坏的文件名,例如
^[[00m^[[00mevent_builder/include/eb_service.h^[[00m" [New DIRECTORY]
或者
:ls
1 %a "^[[00m^[[00mevent_builder/include/eb_service.h^[[00m" line 1
2 "^[[00mevent_builder/include/EventBuilder.h^[[00m" line 0
有谁知道为什么?
答案1
您有一个别名(或函数)来为ls
输出着色。type -a ls
能给你什么?而是使用
vim $(command ls ...)
然而: 不解析ls
尝试
shopt -s nullglob globstar
printf "%s\n" **/*.{h,cpp}