我编写了一个shell脚本,它允许我通过目录树进行grep并保留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;
和单引号用双引号等等,但单引号每次都会消失。
我错过了什么?
答案 0 :(得分:1)
grep "$1" ...
......应该可以正常工作