小编kon*_*kos的帖子

如何(不)将空引用变量作为参数传递给命令

我在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/resourcef http://example.com/resource p1=v1 p2=v2.问题是,当DATA_OPTIONPARAMS是空的.在这种情况下,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)

bash shell

5
推荐指数
1
解决办法
1755
查看次数

3
推荐指数
1
解决办法
1028
查看次数

标签 统计

assembly ×1

bash ×1

shell ×1

x86 ×1