我遇到了以下问题:
我想更改网址的参数。我的想法是首先将参数整体切割为:
url="http://domain.com/file.php?par1=val1&par2=val2&par3=val3"
pars=$(cut -d"?" -f2 <<< $url)
所以现在
echo "$pars"
应该给我一个由“&amp;”分隔的参数列表字符。
par1=val1&par2=val2&par3=val3
我想用变量$ newpar替换val1然后使用curl访问带有更改参数的网站。然后我想将参数更改回val1并将val2更改为$ newpar,依此类推。 我的问题是:我该怎么做?
我不知道会有多少参数,因为$ url变量是从具有不同参数数量的URL的文件中读出的。 我认为某种正则表达式会派上用场,也许for循环可以解决这个问题。但我不确切知道如何。
非常感谢您提前
答案 0 :(得分:1)
假设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包含您正在更改的参数后面的文本(如果有)。