【发布时间】:2021-10-14 06:02:51
【问题描述】:
当我在终端中运行它时,我正在使用 git grep 搜索“\r”字符,它会正确列出输出,但如果我将它存储在一个变量中,它会列出它搜索过的所有文件。关于如何纠正这个问题的任何想法。
我的命令是:git grep -I -c -r -l $'\r' *
我正在尝试这样的事情:OUTPUT=$(git grep -I -c -r -l $'\r' *)
我正在显示输出:echo ${OUTPUT}
【问题讨论】:
-
(1) 您使用的是哪个操作系统? (很重要,因为如果这是 Windows,git 默认将 CR 添加到所有文件)。 (2) git 的
core.autocrlf配置标志的当前值是多少? (3) 请注意,以上内容应为echo "$OUTPUT"——如果您不使用引号,您的输出将在echo过程中被处理(字符串拆分和全局扩展),如I just assigned a variable, butecho $variableshows something else! 中所述/跨度> -
...所以如果您的
OUTPUT变量包含*, f/e,echo $OUTPUT将用当前目录中每个文件的列表替换*,而@ 987654333@ 将显示实际包含的*。 -
另外:不要为自己的变量使用全大写的名称;这些名称用于对 shell 本身有意义的变量,而具有至少一个小写字符的变量保留供应用程序使用,并且不会对 POSIX 兼容的 shell 产生意外的副作用。 (因此,虽然你不能在不破坏 shell 的情况下运行
for PATH in */; do ...,但for path in */; do ...可以正常工作)。 zsh 不符合 POSIX,并且不遵循此规则,但这是不使用它的众多原因之一。 -
一个简单的解释是 all 您的文件包含该字符,因为 git 正在以 crlf 模式检查您的文件;另一个你在 Windows 平台上的翻译层通过试图隐藏那个特定的差异(使所有文件看起来都是原生的)来破坏结果。理想情况下,这个问题应该有足够的细节来证明这样的解释是错误的,或者至少让人们可以测试他们对自己是否正确。目前,除了你之外,没有人可以测试。
-
你写道“我正在尝试这样的事情”。请尽可能简单地重现您的命令,并显示准确的输入/输出。我使用
git grep...的结果是error: unknown switch 'r'。