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

Shell脚本中使用sed命令无法通过变量替换字符串的问题求助

问题原因

  • 变量名拼写错误:
    1. 读取用户名时定义的变量是usernamert,后续组装链接时误写为usernamet,导致用户名变量取值为空
    2. 读取频道号时定义的变量是channelt,后续组装链接时误写为channelt1,导致频道号变量取值为空
  • sed语法错误:
    1. 引号配对混乱:当前写的sed命令里双引号嵌套逻辑错误,shell解析时会出现语法错误,无法正常识别替换规则
    2. 特殊字符未转义:要生成的链接里包含&符号,这个符号在sed的替换段是特殊保留字,代表原匹配到的完整内容,不转义的话会直接替换成原字符串,不会输出&本身
  • 冗余写法:组装t1变量时不需要用echo加子shell,直接赋值即可

修正方案

修正后的可正常运行脚本如下:

echo -n  "Username: "
read usernamert
echo -n "Password: "
read passwordt
echo -n "IP: "
read IPt
echo -n  "Channel: "
read channelt

# 直接赋值变量,同时提前转义t1里的&符号
t1="www://$usernamert:$passwordt@$IPt/TEST/SOMETHING?channel=$channelt&TRUE=1"
t1=${t1//&/\\&}

# 正确写sed的替换规则,引号配对正确
sed -i "s+\"t_1\", \"t_2\"+\"$t1\", \"AAA\"+g" test.txt

如果是在macOS系统执行,需要把sed -i改成sed -i ''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:27:03