Bash自定义Twitch命令:查询字符串构建及跳转异常求助
修复Bash Twitch自定义命令的参数编码与跳转问题
问题根源
- 参数拆分bug:跳转时未用双引号包裹URL变量,Shell会把URL里的空格当成参数分隔符,导致浏览器只接收到
league部分。 - 编码冗余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
相关产品推荐
相关产品推荐

