![在 Bash 脚本中,选择其中一个的第一个匹配项](https://linux22.com/image/1503564/%E5%9C%A8%20Bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%EF%BC%8C%E9%80%89%E6%8B%A9%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8C%B9%E9%85%8D%E9%A1%B9.png)
我正在编写一个 bash 脚本,用于读取 / 中的文件usr/share/applications
以生成菜单冰西。这是我的一些代码:
file = nm-connection-editor.desktop
name = $((grep -m 1 "Name=" $file) | sed 's/Name=//g')
icon = $ ((grep Icon= $file) | sed 's/Icon=//g')
execu = $ ((grep -m 1 Exec= $file) | sed 's/Exec=//g')
commandline = "prog $name $icon $execu"
cate = $(grep -m 1 Categories $file)
echo $cate result in:
Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings;
if [ $(echo $cate |grep Network) ]; then echo $commandline >> menu.Network; fi
if [ $(echo $cate |grep Settings) ]; then echo $commandline >> menu.Settings; fi
问题是,这$commandline
两个类别中都出现了。
我希望它仅出现在“设置”中
我认为在一个单词列表中:游戏网络实用程序设置办公系统......
并选择(从$cate
)最接近行首的,但是如何呢?
答案1
您的顺序if
语句看起来更自然地适合case
:
case "$cate" in
*Network*)
echo $commandline >> menu.Network
;;
*Settings*)
echo $commandline >> menu.Settings
;;
esac