查找确切的单词存在

Finding the exact word exist

提问人:Albert Chan 提问时间:11/14/2023 最后编辑:Albert Chan 更新时间:11/14/2023 访问量:48

问:

我刚刚开始使用 dockutil 以及如何编写执行以下操作的脚本。

检查项目是否存在于 Dock 上。如果它不存在,请添加它。如果它什么都不做。

因此,要检查项目是否存在,您可以使用以下命令

~ % dockutil --find Keynote

结果将与以下内容相呼应

Keynote was not found in Keynote was not found in /Users/$UserName/Library/Preferences/com.apple.dock.plist

因此,我编写了以下脚本来捕获输入

 app='Keynote'
echo "${app}"


Test=$(dockutil --find "${app}" | tr ' ' '\n'| grep "not")

  if [[ ${Test} == "not" ]]; then

  echo " its not there "

else

  echo "its there"

fi

问题是 Keynote 的名字中有“not”这个词,这总是会给我一个误报。 有没有办法从结果中查找“未找到”甚至只是“未找到”。或者甚至是另一种同时执行 if 语句的方法。

bash macOS zsh shebang

评论

0赞 Mark Reed 11/14/2023
grep "not found"?
0赞 Charles Duffy 11/14/2023
未设置其退出状态?如果没有,请将其作为错误提交。如果它确实表现得像一个好的 UNIX 工具,并设置退出状态来指示成功/失败,您应该能够使用,根本不需要读取或解析其输出。dockutilif dockutil --find "$app" >/dev/null 2>&1; then ...
0赞 Charles Duffy 11/14/2023
此外,即使没有,也会设置退出状态,因此没有理由使用变量。dockutilgrepTestif dockutil --find "$app" | grep -qE 'was not found in'; then echo "its not there"; else echo "its there"; fi
0赞 Charles Duffy 11/14/2023
第一种方法(没有 grep)是否有效,或者您必须使用第二种方法?
0赞 tripleee 11/14/2023
您尝试的直接问题是它永远不会完全等于字符串。要搜索子字符串,请 ;但是,如上所述,检查退出状态是更可取的(如果用户位于非英语区域设置中,则输出可能使用其他语言,或者可以更新程序以对其输出字符串进行微不足道的更改)。(另外,那里是相当无用的;shell 可以很好地容纳多行字符串。Test"not"[ "$Test" = *"not"* ]tr

答:

1赞 Diego Torres Milano 11/14/2023 #1

dockutil如果未找到该项目,则以 1 退出,然后您可以这样做

app='Keynote'
echo "${app}"


if ! dockutil --find "${app}"; then
    echo " its not there "
fi

评论

0赞 tripleee 11/14/2023
周围的卷曲在这里并没有真正的用处。${app}
0赞 Diego Torres Milano 11/15/2023
无害,也无济于事