Я написал сценарий оболочки, который позволяет мне проходить через дерево каталогов и сохранять путь в выводе grep.
Это началось так:
#!/bin/bash
# findjs.sh
# Given a word or argument, greps javascript files from one dir down to the 8th dir down,
# as in: */*.js */*/*.js ... */*/*/*/*/*/*.js
f="*/*.js"
for p in {1..8}
do
echo 'Searching '"$f"
grep -in $1 $f;
f="*/"$f
done
Работает довольно хорошо. Проблема в том, что если я хочу отправить строку из нескольких слов в качестве поискового запроса, это расширит их. Это нормально:
./findjs.sh aword /var/local/somedir
Это не:
./findjs.sh 'the message' /var/local/somedir
Bash переводит линию grep в
grep -in the message /var/local/somedir
Я перепробовал разные вещи, чтобы обернуть 1 доллар в одинарные кавычки
как это:
escaped="'\''"
t=$escaped$1$escaped
или
grep -in $escaped$1$escaped $fp;
и одинарные кавычки в двойных кавычках и т. Д., Но одинарные кавычки исчезают каждый раз.
Чего мне не хватает?