Bash 如何将shell脚本参数作为变量传递,以便在执行grep命令时使用

Bash 如何将shell脚本参数作为变量传递,以便在执行grep命令时使用,bash,shell,grep,Bash,Shell,Grep,我有一个名为fruit.txt的文件,其中包含水果名称列表(苹果、香蕉、橘子、猕猴桃等)。我想创建一个脚本,允许我在调用脚本(即script.sh orange)时传递一个参数,然后使用grep在文件fruit.txt中搜索变量(orange)。我有以下脚本 脚本名称和参数如下所示: script.sh橙色 脚本片段如下所示: #!/bin/bash nameFind=$1 echo `cat` "fruit.txt"|`grep` | $nameFind 但是我得到了grep info u

我有一个名为fruit.txt的文件,其中包含水果名称列表(苹果、香蕉、橘子、猕猴桃等)。我想创建一个脚本,允许我在调用脚本(即script.sh orange)时传递一个参数,然后使用grep在文件fruit.txt中搜索变量(orange)。我有以下脚本

脚本名称和参数如下所示: script.sh橙色

脚本片段如下所示:

#!/bin/bash
nameFind=$1
echo `cat` "fruit.txt"|`grep` | $nameFind 

但是我得到了grep info usage命令,脚本似乎正在等待其他命令等建议。非常感谢您的建议。

类似这样的建议应该可以工作:

#!/bin/bash

name="$1"
grep "$name" fruit.txt
不需要同时使用
cat
grep
;您可以简单地将文件名作为第三个参数传递到要匹配的模式之后。如果要匹配固定字符串(即没有正则表达式),也可以使用
-F
修饰符:

grep -F "$name" fruit.txt

此处的管道语法不正确。您正在通过管道将grep的输出作为名为nameFind的变量的输入。因此,当grep命令尝试执行时,它只获取fruit.txt的内容。改为这样做:

#!/bin/bash
nameFind=$1
grep "$nameFind" fruit.txt

请在变量引用(例如,
grep“$nameFind”fruit.txt
)周围使用双引号,以避免不必要的分词和通配符扩展。如果没有它们,像
script.sh“西番莲果”
这样的东西会奇怪地失败。谢谢。我不知道。