如何更改 Bash 中的 URL 参数?

How to alter URL Parameters in Bash?

我遇到了以下问题:

我想更改 URL 的参数。我的想法是先将参数作为一个整体进行切割:

url="http://domain.com/file.php?par1=val1&par2=val2&par3=val3"
pars=$(cut -d"?" -f2 <<< $url)

所以现在

echo "$pars"

应该给我一个由“&”字符分隔的参数列表。

par1=val1&par2=val2&par3=val3

我想用变量 $newpar 替换 val1,然后使用 curl 访问具有更改参数的网站。然后我想将参数改回 val1 并将 val2 更改为 $newpar 等等。 我的问题是:我该怎么做?

不知道会有多少个参数,因为$url这个变量是从一个文件里读出来的URLs,参数个数不一样。 我认为某种正则表达式会派上用场,而且 for 循环可能也能解决问题。但我不知道具体如何。

非常感谢您

假设 var1 足够具体,以下应该有效:

url=${url/par1=val1/par1=$newpar}

唯一的问题是 par1 是否可以作为另一个参数的后缀,例如

url="http://domain.com/file.php?par1=val1&otherpar1=val2&par3=val3"

在这种情况下,使用正则表达式确保 par1 前面有 &?:

[[ $url =~ (.*)([?&])(par1=val1)(.*) ]]
url="${BASH_REMATCH[1]}${BASH_REMATCH[2]}par1=$newpar${BASH_REMATCH[4]}"

元素 1 包含您要更改的参数之前的 ?& 之前的所有内容。元素 2 包含 ?/&。元素 2 是您要替换的文本;我们使用替换文本代替该元素。最后,元素 3 包含您要更改的参数后面的文本(如果有)。