Bash

使用 EOT 在文件中回顯多行

  • September 13, 2022

我想用 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

我該如何解決?

here-document 的結束分隔符必須是該行的第一件事:

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

... 
...

END_SUBMIT_SCRIPT
done

如果要縮進創建送出腳本的腳本中的行,請在行的開頭使用文字製表符並使用 進行重定向<<-DELIMITER,例如

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

-in將<<-導致從 here-document 的每一行中刪除所有初始製表符(不是空格)。這也允許您縮進結束分隔符,如上所示。

另請注意,如果要擴展 here-document 中的變數,則不應引用 here-document 分隔符。

引用自:https://unix.stackexchange.com/questions/717133