Hier ist mein Skript (um die Dateien zu finden, die ein bestimmtes Muster enthalten):
find . -type f \
-exec awk -v vawk="$1" '/'"$vawk"'/ {c++} c>0 { print ARGV[1]; exit 0 } END { if (! c) {exit 1}}' \{\} \;
Ich möchte mein Skript mit einem Argument verwenden §:
MyScript.sh pattern
Mein Problem ist, dass ich es nicht schaffe, die $1
Variable einzufügen awk
.
Wenn ich versuche, mein Skript zu debuggen
bash -x MyScript.sh pattern
Hier ist die Ausgabe:
+ find . -type f -exec awk -v vawk=pattern '// {c++} c>0 {print ARGV[1] ; exit 0 } END { if (! c) {exit 1}}' '{}' ';'
Die $vawk
Variable scheint leer zu sein.
Irgendeine Idee?
awk
die C-ähnlichen Escape-Sequenzen in erweitert werden$1
, sodass dieser Ansatz nicht funktioniert, wenn er$1
möglicherweise Backslash-Zeichen enthält (häufig für reguläre Ausdrücke). Sie könnenENVIRON
stattdessen das awk-Spezialarray verwenden.