Đây là tập lệnh của tôi (để tìm các tệp có chứa một mẫu đã chỉ định):
find . -type f \
-exec awk -v vawk="$1" '/'"$vawk"'/ {c++} c>0 { print ARGV[1]; exit 0 } END { if (! c) {exit 1}}' \{\} \;
Tôi muốn sử dụng tập lệnh của mình với một đối số §:
MyScript.sh pattern
Vấn đề của tôi là tôi không quản lý để đưa $1
biến vào awk
.
Khi tôi cố gắng gỡ lỗi kịch bản của mình
bash -x MyScript.sh pattern
Đây là đầu ra:
+ find . -type f -exec awk -v vawk=pattern '// {c++} c>0 {print ARGV[1] ; exit 0 } END { if (! c) {exit 1}}' '{}' ';'
Các $vawk
biến dường như là trống rỗng.
Bất kỳ ý tưởng?
awk
mở rộng các chuỗi thoát giống như C$1
, để cách tiếp cận không hoạt động nếu$1
có thể chứa các ký tự dấu gạch chéo ngược (phổ biến cho biểu thức chính quy). Bạn có thể sử dụngENVIRON
mảng đặc biệt awk thay thế.