我正在尝试编写一个bash脚本,以便我将用来替换我的egrep命令。我希望能够获取与我的脚本完全相同的输入并将其提供给egrep。 即。
#!/bin/bash
PARAMS=$@
`egrep "$PARAMS"`
但是我注意到如果我回应我正在执行的内容,那么引号已被删除如下:
./ customEgrep -nr“grep my ish”*
返回
egrep -nr grep my ish(来自扩展*的文件列表)
有没有办法让我可以直接输入输入,以便我可以直接使用egrep?
答案 0 :(得分:5)
你想要这个:
egrep "$@"
您键入的引号不会传递给脚本;它们用于确定单词边界。使用"$@"
保留这些单词边界,因此egrep
将获得与直接运行它时相同的参数。但是如果echo
参数,你仍然不会看到引号。
答案 1 :(得分:2)
"
是一个特殊的字符。您需要使用转义字符才能检索"
使用
./customEgrep -nr "\"grep my ish\"" *
如果您不需要在参数中进行任何参数扩展,则可以使用 单引号以避免需要转义双引号:
./customerEgrep -nr '"grep my ish"' *
答案 2 :(得分:2)
$@
很特别。尝试:
value=$( egrep "$@" )
我不清楚为什么你使用bacticks并忽略结果,所以我使用$()
语法并赋值。
如果由于某种原因您希望保存以后使用的参数,您还可以执行以下操作:
for i; do args="$args '$i'"; done # Save the arguments
eval grep $args # Pass the arguments to grep without resetting $1,$2,...
eval set $args # Restore the arguments
grep "$@" # Use the restored arguments