วิธีใช้ heredoc ภายในฟังก์ชั่นทุบตี?


12

มันเป็นไปได้ที่จะแทรกheredocในฟังก์ชั่นทุบตี?

ตัวอย่างเล็ก ๆ น้อย ๆ ด้านล่างนี้ทำให้เกิดข้อผิดพลาด: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

สิ่งแวดล้อม:

  • Ubuntu 11.04 (GNU / Linux 2.6.38-8-server x86_64)
  • GNU ทุบตีรุ่น 4.2.8 (1) - ปล่อย (x86_64-pc-linux-gnu)

ฉันอยู่ภายใต้ความประทับใจที่ heredoc เป็นสิ่ง Perl มีเหตุผลอะไรบ้างที่จะเชื่อว่ามันจะใช้ได้ใน BASH?
jdw

@jdw เอกสารที่นี่มีอยู่ในหลายภาษารวมถึง bash
Zoredache

ฉันเห็นว่าตอนนี้ เย็น.
jdw

คำตอบ:


10

รหัสของคุณดูดีสำหรับฉันดังนั้นฉันจึงคัดลอกมันเป็นบรรทัดและมันใช้ได้กับฉันใน:

  • OSX 10.7, ทุบตี 3.2.48 (1) - ปล่อย (x86_64-apple-darwin11)
  • Ubuntu 10.04.3, ทุบตี 4.1.5 (1) - ปล่อย (x86_64-pc-linux-gnu)

เป็นไปได้หรือไม่ที่คุณจะพิมพ์ไฟล์ด้วยมืออีกครั้งเพื่อให้แน่ใจว่าคุณจะไม่พลาดหรือเพิ่มช่องว่าง / แท็บ / ฯลฯ

นอกจากนี้คุณจะดำเนินการอย่างไร ฉันทำchmod +x test.shแล้ว./test.sh

แก้ไข: ฉันได้รับข้อผิดพลาดเดียวกับคุณเมื่อฉันเพิ่มช่องว่างที่จุดเริ่มต้นของบรรทัดด้วยการปิด HEREDOC

หมายเหตุเพิ่มเติม: ช่องว่างท้ายหลังการปิดHEREDOCสามารถทำให้เกิดสิ่งนี้ได้


1
แปลกมันใช้งานได้แล้ว ... เน้นสีไวยากรณ์ที่รู้จัก HEREDOC มาก่อน (ไม่ถ้าคุณเพิ่มพื้นที่นั้นก่อนปิด HEREDOC) ฉันแก้ไขสคริปต์ต้นฉบับเพื่อใช้ไฟล์ภายนอกดังนั้นฉันไม่แน่ใจว่าสิ่งใด มันผิด มันจะสะดวกกว่ากับ heredocs มาก!
Leftium

1
แน่นอน! ฉันรักฉันบาง heredocs
David

1
นอกจากนี้: ช่องว่างท้ายหลังการปิดHEREDOCสามารถทำให้สิ่งนี้ (ข้อผิดพลาดชนิดนี้ยากที่จะติดตามถอนหายใจ)
0laf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.