我试图制作可以在* .desktop文件中找到“关键字”的bash脚本。我的方法是将一些关键字设置为数组,然后将其传递给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
任何建议都将受到赞赏
答案 0 :(得分:3)
如果您仅将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
答案 1 :(得分:-1)
尝试
cat /usr/share/applications/*.desktop | grep -i Mail\ Reader