私はこの関数を作成して、ファイルのすべての行に複数のgrepを作成します。私は、次のようにそれを実行します。string1
、string2
、...、stringN
:このbash関数で "for"ループの使用を避けるにはどうすればよいですか?
cat file.txt | agrep string1 string2 ... stringN
function agrep() {
for a in [email protected]; do
cmd+=" | grep '$a'";
done ;
while read line ; do
eval "echo "\'"$line"\'" $cmd";
done;
}
アイデアは、すべての文字列を含むすべての行を印刷することです。これは、すでに動作しますが、私は表現構築するfor
の使用を避けたい:
| grep string1 | grep string2 ... | stringN
そしてそれはまた、eval
の利用が可能です場合を。
echo "| grep $"{1..3}
をそして私が手::次のように私はいくつかの拡張を作ってみました
| grep $1 | grep $2 | grep $3
これは私が欲しいものはほとんどですが、問題は私がしようとしたときということです:
echo "| grep $"{1..$#}
bash cantは$#
のために{1..$#}
を展開できないため、拡張は行われません。それは数字だけで動作します。 agrep
機能でfor
の使用を避けるために機能する拡張機能を構築したいと思います。
これは非常に便利でしたが、私は1つの質問があります。if文はオプションです。それの使用について確かめてください。 – neo33
引数がまったく指定されていない場合、またはすべての引数が削除された後、 'agrep'はその入力を変更せずにそのまま出力に渡す必要があります。 'cat'コマンドはそれを行います。 –
ご協力ありがとうございます、これは非常に便利でした。 – neo33