Bash脚本传空变量给curl触发"curl: (3) <url> malformed"错误原因
问题原因解析
这是Bash中变量展开时的引号处理规则导致的差异,核心在于空变量带引号和不带引号展开时的行为完全不同:
1. 带双引号的情况:"${myvar}"
当myvar=""时,"${myvar}"会被Bash展开成一个空的命令行参数。此时实际执行的命令是:
curl "" "http://duckduckgo.com"
curl会把第一个空字符串当成需要请求的URL,因此抛出curl: (3) <url> malformed的错误。但因为第二个参数是有效的URL,curl仍会处理这个正确请求,所以你能拿到响应内容,只是前面会带上错误提示。
2. 不带引号的情况:${myvar}
当myvar=""时,不带引号的变量展开会触发Bash的单词拆分规则:空变量会被完全忽略,不会生成任何命令行参数。此时实际执行的命令是:
curl "http://duckduckgo.com"
curl只收到一个有效的URL参数,因此能正常执行且无错误提示。
额外补充
当变量非空时(比如myvar="--silent"),带引号和不带引号的展开结果一致,都会生成一个--silent参数,所以两种写法都能正常工作。只有当变量为空(或包含空白字符)时,引号的差异才会明显体现。
内容的提问来源于stack exchange,提问作者danisan00
相关产品推荐
相关产品推荐

