bash - 将命令结果分配给变量时出现语法错误
问题描述
我正在使用 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
}
假设运行一个向标准输出返回错误消息的节点脚本,然后将该输出分配给一个变量。只有函数中的第一行很重要。
我对 bash 很陌生,而且我弄乱了这一行的格式,主要是在不同的地方添加空格,但我似乎找不到导致语法错误的原因。这可能很简单,但如果有人能告诉我可能出了什么问题,我会很感激的。
谢谢!
解决方案
通过将您的代码粘贴到shellcheck,我得到了:
function testHandleNodeReturnError{
^-- SC1095: You need a space or linefeed between the function name and body.
这是相当字面的。你需要一个空间。
函数 testHandleNodeReturnError
不推荐使用function
关键字。只需使用.function_name() { function_body; }
if [ grep -i "错误" <<< "$nodeError" ]; 然后
这是非常错误的。这是将nodeError
变量的内容输出到[
命令的标准输入。是[
一个命令,一个可执行文件,就像grep
,它是程序的别名test
。然后它以, ,和4 个参数运行[
comamnd 。你不想要那个。如果要检查字符串,只需使用' 退出状态:grep
-i
"Error"
]
Error
grep
这样做:
testHandleNodeReturnError() {
nodeError=$(node "./node_fake_returns/return_error.js")
if grep -q -i "Error" <<<"$nodeError"; then
assertTrue "true"
fi
}
推荐阅读
- java - What is the elegant way to parse a map into an object?
- html - How to remove an outline from a selected Card Bootstrap 5
- ruby-on-rails - Rails: Belongs_to and Has_many associations in Rails Engines
- php - How to use a function with several arguments without defining them in advance, with PHP?
- c++ - Problem moving vertex on Arrangement using Arrangement_accessor
- python - Django 序列化程序不会保存到数据库
- python - Pandas: create column id based on intersections on rows
- r - R function defined but not showing as object
- json - svelte - 从本地文件夹读取 json 文件
- laravel - Laravel: local.ERROR: Trying to get property 'body' of non-object