我有个问题。我先展示一下代码(用 bash 编写)。
#! /bin/bash
oldlink="https://downloads.plex.tv/plex-media-server-new/1.21.1.3876-3c3adfcb4/debian/plexmediaserver_1.21.1.3876-3c3adfcb4_amd64.deb"
newlink=$(curl -s -S https://plex.tv/pms/downloads/5.json | grep -o 'Ubuntu (16.04+) / Debian (8+) - Intel/AMD 64-bit","build":"linux-x86_64","distro":"debian","url":"https://downloads.plex.tv/plex-media-server-new/.*/debian/plexmediaserver_.*_amd64.deb","checksum":".*"},{"label":"Ubuntu (16.04+) / Debian (8+) - ARMv8' | grep -o https://.*.deb)
correctlink="https://downloads.plex.tv/plex-media-server-new/.*/debian/plexmediaserver_.*_amd64.deb"
if [[ $newlink = $correctlink ]]
then
echo "new link is correct"
else
echo "new link isn't correct"
fi
我有一个永远不会改变的链接(老实说,它有时会改变,因为此代码是更大脚本的一部分,但现在我们将其称为静态的)(旧链接)。每次运行脚本时,新链接(newlink)都会更新。newlink 之后的命令输出将与旧链接处的链接完全相同。除了版本号(1.21.1.3876_3c3adfcb4)外,如果有新版本。
当上面的代码运行时,这意味着 newlink 与 oldlink 不同(大多数情况下是新版本,因为链接中的版本号当然会改变,所以链接会不同)。如果链接相同,它永远不会运行。当运行此代码时,它们总是不同的。
我想要做的是比较 oldlink 和 newlink。oldlink 和 newlink 彼此不同。我想检查差异是版本号还是链接的不同部分。
它应该如何工作
oldlink = "https://downloads.plex.tv/plex-media-server-new/1.21.1.3876-3c3adfcb4/debian/plexmediaserver_1.21.1.3876-3c3adfcb4_amd64.deb"
newlink = "https://downloads.plex.tv/plex-media-server-new/1.22.4.3876-3c3adfcb4/debian/plexmediaserver_1.22.4.3876-3c3adfcb4_amd64.deb"
[echo] new link is correct
==============================================
old link = "https://downloads.plex.tv/plex-media-server-new/1.21.1.3876-3c3adfcb4/debian/plexmediaserver_1.21.1.3876-3c3adfcb4_amd64.deb"
newlink = "https://this.is.something.else.hello/plex-media-server-new/1.21.1.3876-3c3adfcb4/blablabla/plexmediaserver_1.21.1.3876-3c3adfcb4_amd64.deb"
[echo] new link isn't correct
因此,版本号发生变化时,没问题。但链接的其他部分发生变化时,就不行了。这才是应该的工作方式。
我想检查这一点的方法是将 newlik 与标准 (correctlink) 进行比较。如果它们匹配,则它是正确的链接。因为只有当版本号不同时,correctlink 才会与 newlink 匹配。其他任何事情都不能不同。
它是如何工作的
它给出随机输出。有时它给出正确输出,有时给出错误输出。我无法找到它何时出错、何时正确的结构。我感觉它与正确链接中的 * 有关。我尝试过 .* 和 *,但结果没有改变。
我该如何修复这个问题,或者有没有更好的方法。我更喜欢一种比修复更好/更短/更快/更简单的方法。谢谢!