首页 > 解决方案 > 无法将第三个参数传递给 bash 脚本

问题描述

我认为答案对您来说很简单,但是我无法单独处理。首先,脚本中的函数如下所示:

function assertEqual() {

    local expected=$1
    local actual=$2
    local message=$3

    echo $message

    if [ "$actual" = "$expected" ]
    then
        echo "Test OK (actual value: $actual)"
        return 0
    else
        echo "Test FAILED, EXPECTED VALUE: $expected, ACTUAL VALUE: $actual, WILL ABORT"
        return 1
    fi
}

该函数的逻辑做了它必须做的事情,它是正确的但是我找不到将 $message 打印到控制台的方法:

local message=$3
echo $message

我正在调用这样的函数:

assertEqual "$MOV_ID_REVS_RECS" $(echo $RESPONSE | jq .movieId) "Comparing id's"   
assertEqual 3 $(echo $RESPONSE | jq ".recommendations  | length") "Comparing recommendations length"    
assertEqual 3 $(echo $RESPONSE | jq ".reviews | length") "Comparing reviews length"

我得到的输出是这样的:

Test OK (HTTP Code: 200)
Test OK (HTTP Code: 200)
Test OK (HTTP Code: 200)
Wait for messages to be processed... 
Test OK (HTTP Code: 200)

Test OK (actual value: 2)

Test OK (actual value: 3)

Test FAILED, EXPECTED VALUE: 3, ACTUAL VALUE: 1, WILL ABORT

您可以看到有空白的白色行,这意味着我错误地传递了第三个参数对吗?

标签: linuxbashubuntu

解决方案


问题可能是在传递参数时替换中的多个单词。

assertEqual "$MOV_ID_REVS_RECS" $(echo $RESPONSE | jq .movieId) "Comparing id's"   
assertEqual 3 $(echo $RESPONSE | jq ".recommendations  | length") "Comparing recommendations length"    
assertEqual 3 $(echo $RESPONSE | jq ".reviews | length") "Comparing reviews length"

请尝试在参数中引用$(echo $RE...)>"$(echo $RE...)"并测试结果。assertEqual 3 test "Comparing reviews length"或者,如果所有参数都正常工作,请尝试传递。


推荐阅读