如何正确地将带有空格的$ string传递给grep

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确地将带有空格的$ string传递给grep相关的知识,希望对你有一定的参考价值。

我试图制作bash脚本,可以在* .desktop文件中找到“关键字”。我的方法是将一些关键字设置为数组,然后将其传递给grep,它可以完美地工作,直到关键字至少有两个由空格分隔的单词。

应该是什么

cat /usr/share/applications/*.desktop | grep -i "Mail Reader"

我试过的

search=$(printf 'Name=%s' "${appsx[$index]}")
echo ""$search"" #debug
cat /usr/share/applications/*.desktop | grep -i $search
search=$(printf 'Name=%s' "${appsx[$index]}")
echo ""$search"" #debug
cat /usr/share/applications/*.desktop | grep -i ""$search""
search=$(printf '"Name=%s"' "${appsx[$index]}")
echo $search #debug
cat /usr/share/applications/*.desktop | grep -i $search

任何建议都非常感谢

答案

如果您只是将Mail Reader分配给变量搜索,如下所示

search=Mail Reader

bash会抱怨找不到Reader命令,因为它在第一个空白字符之后需要任何后续命令。你需要的是什么

search="Mail Reader" # 'Mail Reader' would also do.

在你的命令替换的情况下,事情没有什么不同,你需要双引号包装器,因为替换本身不会发生在单引号内

search="$(command)"

在你的情况下,你使用命令替换做了一个过度杀伤。它可以简化为:

search="Name=${appsx[$index]}"
# Then do the grep.
# Note that cat-grep combo could be simplified to
# -h suppresses printing filenames to get same result as cat .. | grep
grep -ih "$search" /usr/share/applications/*.desktop
另一答案

尝试

cat /usr/share/applications/*.desktop | grep -i Mail Reader

以上是关于如何正确地将带有空格的$ string传递给grep的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将页面属性传递给局部视图?

如何正确地将独特的附加内容传递给待处理的意图?

如何正确地将变量传递给 apollo useQuery?

如何正确地将 RelayState 传递给 Okta 的 ACS URL?

如何正确地将文本文件传递给 NSFileManager

如何正确地将 C 数组传递给 C#?