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

Bash自定义Twitch命令:查询字符串构建及跳转异常求助

修复Bash Twitch自定义命令的参数编码与跳转问题

问题根源

  1. 参数拆分bug:跳转时未用双引号包裹URL变量,Shell会把URL里的空格当成参数分隔符,导致浏览器只接收到league部分。
  2. 编码冗余bug:之前的循环逻辑给最后一个游戏名字段也加了%20,导致URL末尾多了无用的编码字符。

修复后的完整脚本

twitch() {
    local target_url=""
    if [[ "$1" == "-game" ]]; then
        # 移除第一个参数(-game),剩下的全是游戏名字段
        shift
        local encoded_game=""
        for segment in "$@"; do
            # 对单个字段做URL编码(替换空格为%20)
            local encoded_segment=$(printf "%s" "$segment" | sed 's/ /%20/g')
            # 仅当已有内容时才添加分隔符,避免末尾多余%20
            [[ -n "$encoded_game" ]] && encoded_game+="%20"
            encoded_game+="$encoded_segment"
        done
        target_url="https://twitch.tv/directory/game/$encoded_game"
    fi

    # 打印生成的URL(可选,用于调试)
    echo "$target_url"
    # 跳转必须用双引号包裹变量,防止Shell拆分参数
    xdg-open "$target_url"  # macOS替换为open,WSL替换为start
}

核心修复细节

  • 完整捕获游戏名:用shift跳过-game后,"$@"会保留所有剩余参数,哪怕游戏名带空格也不会丢失。
  • 精准编码逻辑:先判断是否已有编码内容,再拼接%20,彻底避免末尾多余的编码字符。
  • 强制参数完整性:xdg-open "$target_url"的双引号是关键,让Shell把整个URL当作单个参数传递给浏览器,不会因为空格拆分成多个参数。

测试验证

输入twitch -game league of legends,会生成标准URL:https://twitch.tv/directory/game/league%20of%20legends,浏览器会完整跳转至该频道目录,无任何多余字符或截断问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:42:39