小bash脚本的问题

Jon*_*n H 0 grep find bash-script

find当我在某处进行更改时,我经常在我的代码项目中运行,我必须找到它影响其他代码片段的位置,所以我想写一个非常小的脚本来简化它,称之为blah.sh

#!/bin/bash -eu

if [ $# -ne 3 ]; then
    echo "Three inputs required"
else
    find $1 -name $2 -exec grep -iHn $3 {} \;
fi
Run Code Online (Sandbox Code Playgroud)

问题是,当第三个参数(我要查找的文本)包含空格时,我会收到错误消息。例如,为每个试图探索的文件blah . '*.php' 'foo bar'返回。我确定这是一个愚蠢的错误,我并没有真正接触过 bash..grep: bar: No such file or directorygrep

rep*_*lay 6

你有没有试过这样的:

find "$1" -name "$2" -exec grep -iHne "$3" {} +
Run Code Online (Sandbox Code Playgroud)

如果没有引号,bash 会对变量执行分词和文件名生成,因此它们最终会作为多个参数传递。

  • 我添加了引用其他两个参数以及原因的简要说明。如果您不同意,请随时回复。 (2认同)