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

Shell脚本变量赋值中嵌套${line}变量无法识别的问题求助

问题解决:Bash脚本中curl无法识别循环变量${line}

问题分析

核心问题是:while循环读取的$line变量在echo时显示正常,但传入curl命令后无法被正确识别,替换为静态域名则curl能正常运行。最可能的原因是输入文件domain.txt包含Windows格式的换行符(CRLF,即\r),导致$line变量末尾带有隐藏的回车符,curl实际请求的是域名\r而非正确的域名。

解决方案

1. 转换输入文件为Unix格式

使用dos2unix命令将domain.txt的换行符转为Unix标准的LF:

dos2unix domain.txt

如果没有dos2unix工具,也可以用sed命令直接去除回车符:

sed -i 's/\r$//' domain.txt

2. 读取变量时主动清理隐藏字符

修改while循环的读取逻辑,直接过滤变量中的回车、换行符:

while IFS= read -r line; do
    # 移除变量末尾的回车和换行符
    line=$(tr -d '\r\n' <<< "$line")
    # 执行curl请求(注意变量必须用双引号包裹)
    CURL_REQ=$(curl -is "$line" -H 'Pragma: akamai-x-get-extracted-values' | grep 'AKA_PM_PROPERTY_NAME')
    echo "$line"
    echo "$CURL_REQ"
    PROP_VALUE=$(echo "$CURL_REQ" | cut -c 51-)
    echo "$PROP_VALUE"
done < "$INPUT_FILE"

3. 强制保持变量的引号包裹

无论域名是否包含特殊字符,都要用双引号包裹$line,避免Shell对变量内容进行意外拆分,这是Bash脚本的标准规范:

curl -is "$line" -H 'Pragma: akamai-x-get-extracted-values'

调试验证

如果问题仍未解决,可以在curl命令前添加echo语句,打印实际执行的命令,直观确认请求地址是否正确:

echo "实际执行的curl命令:curl -is \"$line\" -H 'Pragma: akamai-x-get-extracted-values'"

通过输出能直接看到$line的真实内容,排查是否存在其他隐藏字符或格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:05:25