You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中cbor-diag工具HereDoc传参报错排查与解决

解决Bash脚本中HereDoc调用CBOR工具的语法错误

问题背景

我正在为CBOR编解码器编写测试,使用cbor-diag CLI工具生成校验值。每次测试仅需修改编解码的值,但重复编写完整命令过于繁琐,编写脚本自动传入目标值时,遇到了HereDoc语法错误。

报错信息

/opt/cbor_dec: line 7: warning: here-document at line 6 delimited by end-of-file (wanted `END')
/opt/cbor_dec: line 8: syntax error: unexpected end of file

初始脚本(错误写法)

#!/bin/bash
 if [ $# -eq 0 ]
 then
   echo "no args passed"
 else
   variable="$1 END"
   cbor-diag --to bytes <<-END ${variable}|xxd
 fi

第一次更新(仍报错)

改用标准HereDoc语法后,错误依旧:

if [ $# -eq 0 ]
then
    echo "no args passed"
else
    cbor-diag --to bytes <<-END | xxd
    ${1}
    END
fi

最终修正方案

问题根源是END分隔符前存在空格,Bash无法识别带前导空格的结束标记。修正后的脚本:

#!/bin/bash
if [ $# -eq 0 ]
then
    echo "no args passed"
    exit 1
fi
cbor-diag --to bytes <<-END | xxd
${1}
END

注意:使用<<-END语法时,END必须顶格书写,不能有任何前导空格(若用制表符,<<-会忽略前导制表符,但空格不支持),否则Bash会找不到结束分隔符,触发“未预期的文件结束”错误。

内容的提问来源于stack exchange,提问作者Super598

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:05:21