如何正确地将带有空格的$ 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的主要内容,如果未能解决你的问题,请参考以下文章