将命令结果分配给变量时出现语法错误

时间:2019-04-14 21:36:04

标签: bash testing

我正在使用shunit2单元测试框架进行一些基本的单元测试。 我在函数的第一行收到了“意外令牌`nodeError = $(node“ node_fake_returns / return_error.js”)附近的语法错误”错误。功能如下:

function testHandleNodeReturnError{
    nodeError=$( node "./node_fake_returns/return_error.js" )    
    if [ grep -i "Error" <<< "$nodeError"  ]; then
        assertTrue "true"
    fi
}

假设运行一个节点脚本,该脚本将错误消息返回到stdout,然后将该输出分配给变量。函数中只有第一行很重要。

我对bash还是很陌生,我已经弄混了这一行的格式,大多只是在不同位置添加空格,但是我似乎找不到导致语法错误的原因。这可能很简单,但是如果有人可以告诉我什么地方可能出了问题,我将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

通过将您的代码粘贴到shellcheck上,我留下了:

function testHandleNodeReturnError{  
                                  ^-- SC1095: You need a space or linefeed between the function name and body.

这很直白。你在那里需要一个空间。

  

函数testHandleNodeReturnError

使用function关键字是deprecated。只需使用function_name() { function_body; }

  

if [grep -i“错误” <<<“ $ nodeError”];然后

这是非常错误的。这会将nodeError变量的内容输出到[命令的标准输入。 [是命令,是可执行文件,就像grep一样,它是test程序的别名。然后它将[grep-i"Error"]用作其4个参数。你不要那样如果要检查Error字符串,只需使用grep的退出状态:

也是这样:

testHandleNodeReturnError() {
    nodeError=$(node "./node_fake_returns/return_error.js")
    if grep -q -i "Error" <<<"$nodeError"; then
        assertTrue "true"
    fi
}