小さなbashスクリプトの問題

小さなbashスクリプトの問題

私はしばしばどこかに変更を適用し、findそれが他のコードに影響を与える場所を見つける必要があるときにコードプロジェクトで実行するので、それを簡単にするために非常に小さなスクリプトを書く方法を考えましたblah.sh

#!/bin/bash -eu

if [ $# -ne 3 ]; then
    echo "Three inputs required"
else
    find $1 -name $2 -exec grep -iHn $3 {} \;
fi

問題は、3番目のパラメータ(検索しているテキスト)にスペースが含まれているとエラーが発生することです。たとえば、ナビゲートしようblah . '*.php' 'foo bar'としたgrep: bar: No such file or directory各ファイルを返します。grep私はこれが愚かな間違いであると確信しており、bashに慣れていません。

ベストアンサー1

次のことを試してみましたか?

find "$1" -name "$2" -exec grep -iHne "$3" {} +

引用符がない場合、bash は変数に対して単語分割とファイル名の生成を実行するため、変数は複数の引数で渡されます。

おすすめ記事