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
相关产品推荐
相关产品推荐

