我试图制作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