我在bash脚本中有一个函数,看起来像这样(简化):
# Usage: f URL [PARAMETER]...
f() {
local URL="$1"; shift
local PARAMS
for arg in "$@"; do
PARAMS="${PARAMS}&${arg}"
done
PARAMS="${PARAMS#'&'}"
local DATA_OPTION
[ -z "${PARAMS}" ] || DATA_OPTION='--data'
curl -o - "${DATA_OPTION}" "${PARAMS}" "${URL}"
}
Run Code Online (Sandbox Code Playgroud)
它可以被称为f http://example.com/resource或f http://example.com/resource p1=v1 p2=v2.问题是,当DATA_OPTION且PARAMS是空的.在这种情况下,Bash将两个空参数传递给curl,然后通过curl将其识别为URL并生成以下丑陋的消息:
curl: (3) <url> malformed
curl: (3) <url> malformed
Run Code Online (Sandbox Code Playgroud)
我使用if/else暂时解决了这个问题,所以DATA_OPTION并且PARAMS根本没有传递:
[..]
if [ -z "${PARAMS}" ]; then
curl -o - --data "${PARAMS}" "${URL}"
else
curl -o - "${URL}" …Run Code Online (Sandbox Code Playgroud)