将搜索字符串作为shell变量传递给grep

时间:2013-02-12 20:17:22

标签: bash grep

我必须编写一个小的bash脚本来确定字符串是否对bash变量命名规则有效。我的脚本接受变量名作为参数。我试图用我的正则表达式将该参数传递给grep命令但是我尝试了一切,grep尝试打开作为文件传递的值。

I tried placing it after the command as such
grep "$regex" "$1"

and also tried passing it as redirected input, both with and without quotes
grep "$regex" <"$1"

两次grep都试图将其作为文件打开。有没有办法将变量传递给grep命令?

2 个答案:

答案 0 :(得分:7)

您的示例都将“$ 1”解释为文件名。要使用字符串,您可以使用

echo "$1" | grep "$regex" 

或特定于bash的“here string”

grep "$regex" <<< "$1"

你也可以在没有grep with

的情况下更快地完成
[[ $1 =~ $regex ]]  # regex syntax may not be the same as grep's

或者如果您只是检查子字符串,

[[ $1 == *someword* ]]

答案 1 :(得分:0)

您可以使用bash内置功能=~。像这样:

if [[ "$string" =~ $regex ]] ; then 
    echo "match"
else 
    echo "dont match"
fi