使用 EOT 回显文件中的多行

使用 EOT 回显文件中的多行

我想使用 EOT 将多行写入文件,但以下脚本

#!/bin/bash
bench="X"
file_name="submit2.sh"
ids=(55)
for id in "${arrayName[@]}"; do
    cat <<'EOT' >> $bench/$file_name
    #!/bin/bash -l
    #PBS -l nodes=1:ppn=1
    echo $id
    EOT
done              # line 11

给出这个错误

line 11: warning: here-document at line 6 delimited by end-of-file (wanted `EOT')
line 12: syntax error: unexpected end of file

我该如何解决这个问题?

答案1

此处文档的结束分隔符必须是该行的第一行:

for ...; do
    cat <<END_SUBMIT_SCRIPT
#!/bin/bash

... 
...

END_SUBMIT_SCRIPT
done

如果您想缩进创建提交脚本的脚本中的行,请在行的开头使用文字制表符并使用 进行重定向<<-DELIMITER,例如

for ...; do
    cat <<-END_SCRIPT
        #!/bin/bash
        ...
        ...
        END_SCRIPT
done

in将会导致所有初始制表符(不是空格)从此处文档的每一行-<<-删除。这还允许您缩进结束分隔符,如上所示。

另请注意,如果要扩展此处文档中的变量,则不应引用此处文档分隔符。

相关内容