Bash vs. Zsh,git grep在bash for循环中工作但不是zsh for循环?

时间:2016-09-09 18:01:48

标签: bash zsh

以下在bash中有效,但在zsh中没有,我不确定原因:

user@machine:~/some_git_repo$ for i in $(ls ./conf); do git --no-pager grep $i ; done

zsh shell为./conf

中的每个文件生成以下内容
fatal: command line, 'some_file_name.xml': Unmatched [ or [^

1 个答案:

答案 0 :(得分:3)

你根本不应该在这里使用命令替换。相反,使用glob - 并查看Why you shouldn't parse the output of ls(1)

# this works reliably in both bash and zsh
for i in ./conf/*; do git --no-pager grep -F -e "${i##*/}"; done

请注意grep -F的使用 - 这意味着您的参数被视为文字字符串,而不是正则表达式,因此您不能将文件名视为无效的正则表达式语法。