如何解决Shell脚本中用cat命令结合here-document创建文件的语法错误?
问题解决:Shell脚本中here-document的语法错误
错误原因
here-document的结束标记(这里的EOF)必须顶格书写,不能有任何前置空格或制表符。你的脚本里结束的EOF前面有缩进,Shell会把它当作文件内容的一部分,无法识别为here-document的结束标记,导致函数的闭合}无法被正确解析,最终触发"end of file unexpected (expecting "}")"错误。
修正后的脚本
#!/bin/bash create_file () { cat > a.txt << EOF 0 abc def ghi jkl mno pqrs tuv wxyz EOF } create_file
补充说明
如果想保留内容的缩进,同时让结束标记的制表符缩进被忽略,可以使用<<-EOF(注意减号),此时结束标记前的**制表符(Tab)**会被Shell忽略,但空格依然不行。示例:
#!/bin/bash create_file () { cat > a.txt <<-EOF 0 abc def ghi jkl mno pqrs tuv wxyz EOF # 此处为Tab缩进,不可用空格 } create_file
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

