Сохранение (восстановление?) Одинарных кавычек в аргументах Bash для команд сценариев - PullRequest
0 голосов
/ 29 января 2011

Я написал сценарий оболочки, который позволяет мне проходить через дерево каталогов и сохранять путь в выводе 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;

и одинарные кавычки в двойных кавычках и т. Д., Но одинарные кавычки исчезают каждый раз.

Чего мне не хватает?

1 Ответ

1 голос
/ 29 января 2011
grep "$1" ...

... должно работать нормально

...