在脚本命令的Bash参数中保留(重构?)单引号

时间:2011-01-28 21:37:12

标签: bash grep quotes

我编写了一个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;

和单引号用双引号等等,但单引号每次都会消失。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

grep "$1" ...

......应该可以正常工作