cURL输出存入bash变量后内容损坏,求排查解决
问题原因与解决办法
这个问题我太熟悉啦!你遇到的是bash变量处理时的空白字符解析陷阱,咱们来一步步搞明白:
为什么直接执行curl正常,存变量后echo就乱了?
当你直接在终端运行curl -ksi http://localhost/时,终端会原样输出所有字符——包括换行符、回车符这些控制字符,所以你能看到完整的HTTP响应内容。
但当你把输出存入变量(不管用反引号VAR=curl...``还是VAR=$(curl...)),再用echo $VAR输出时,bash会对变量内容做分词处理:
- 它会把所有的空白字符(换行、空格、制表符)都替换成单个空格
- 还会意外解析一些特殊字符(比如响应里的标签内容,可能因为换行被截断后和其他字符混在一起)
这就导致你看到的内容完全乱掉了。
解决办法
只需要改两个小地方,就能完美解决:
1. 推荐用$(...)代替反引号存储命令输出
虽然反引号也能捕获命令输出,但$(...)的可读性更好,嵌套使用时也不容易出错:
VAR=$(curl -ksi http://localhost/)
2. 输出变量时一定要加双引号
用echo "$VAR"代替echo $VAR,双引号会告诉bash原样保留变量里的所有字符,包括换行、空格和特殊符号,不会做任何分词或转义处理:
echo "$VAR"
测试对比
错误方式(输出乱码):
VAR=`curl -ksi http://localhost/` echo $VAR
正确方式(输出完整正常响应):
VAR=$(curl -ksi http://localhost/) echo "$VAR"
内容的提问来源于stack exchange,提问作者vovacodes
相关产品推荐
相关产品推荐

