You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本如何替换URL中?符号后面的指定子串

Bash脚本替换URL问号后内容的可行实现

直接用Bash原生的参数扩展就能实现需求,不需要调用外部expr工具,逻辑更简洁高效:

#!/bin/bash

url="https://example.com/tfzzr?uhg"
replace_string="abc"

# 判断URL是否包含?
if [[ "$url" == *"?"* ]]; then
  # ${url%%\?*} 表示从url末尾匹配最长的?开头的内容并删除,保留?前的部分
  new_url="${url%%\?*}?$replace_string"
else
  # 若URL无?,可按需选择直接拼接?和替换串,或是保留原URL
  new_url="$url?$replace_string"
fi

echo "原URL:$url"
echo "替换后URL:$new_url"

原有代码思路的修正版

如果要沿用你计算问号位置的思路,需要修正变量赋值、子串截取的语法错误:

  • Bash变量赋值时等号两侧不能有空格,捕获命令输出需要用$()包裹命令
  • expr index返回的位置从1开始计数,而Bash子串截取的起始下标从0开始,需要做偏移转换
    修正后代码如下:
#!/bin/bash

url="https://example.com/tfzzr?uhg"
replace_string="abc"

# 获取?第一次出现的位置,不存在则返回0
first=$(expr index "$url" "?")

if [ "$first" -ne 0 ]; then
  # 截取?之前的前缀
  prefix=${url:0:$((first - 1))}
  new_url="$prefix?$replace_string"
else
  new_url="$url?$replace_string"
fi

echo "替换后URL:$new_url"

内容的提问来源于stack exchange,提问作者Andrewboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:03