คำถามติดแท็ก here-string

2
ทำไม wc <<<“ $ string” แสดงความยาวหนึ่งไบต์นานกว่า printf“ $ string” | ห้องน้ำ?
โดยบังเอิญฉันพบว่าwcนับแตกต่างกันขึ้นอยู่กับว่ามันได้รับข้อมูลจากทุบตี: $ s='hello' $ wc -m &lt;&lt;&lt;"$s" 6 $ wc -c &lt;&lt;&lt;"$s" 6 $ printf '%s' "$s" | wc -m 5 $ printf '%s' "$s" | wc -c 5 นี่คือ - IMHO ทำให้สับสน - พฤติกรรมมีการบันทึกไว้ที่อื่นหรือไม่ สิ่งที่wcนับที่นี่ - นี่คือการขึ้นบรรทัดใหม่หรือไม่


3
ไม่สามารถสร้างไฟล์ temp สำหรับ here-document: การอนุญาตถูกปฏิเสธ
[หมายเหตุ: Q ที่คล้ายกันนี้เกี่ยวข้องกับข้อความแสดงข้อผิดพลาด bash เดียวกัน มันถูกทำเครื่องหมายว่าซ้ำกับคำถามอื่น ๆนี้ แต่เนื่องจากฉันพบแหล่งที่มาที่แตกต่างกันมากสำหรับข้อผิดพลาดนี้ฉันจะตอบคำถามของฉันเองด้านล่าง] บรรทัดสคริปต์ทุบตีที่ทำงานก่อนหน้านี้ while ... do ... done &lt;&lt;&lt; "$foo" วันหนึ่งเริ่มผลิตข้อความผิดพลาดนี้: ไม่สามารถสร้างไฟล์ temp สำหรับ here-document: การอนุญาตถูกปฏิเสธ

4
เหตุใดการตัดจึงล้มเหลวด้วยการทุบตีและไม่ zsh
ฉันสร้างไฟล์ที่มีฟิลด์คั่นด้วยแท็บ echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz &gt; input ฉันมีสคริปต์ชื่อต่อไปนี้ zsh.sh #!/usr/bin/env zsh while read line; do &lt;&lt;&lt;$line cut -f 2 done &lt; "$1" ฉันทดสอบมัน $ ./zsh.sh input bar bar มันใช้งานได้ดี อย่างไรก็ตามเมื่อฉันเปลี่ยนบรรทัดแรกเพื่อเรียกใช้bashแทนจะล้มเหลว $ ./bash.sh input foo bar baz foo bar baz ทำไมสิ่งนี้ถึงล้มเหลวbashและทำงานกับzsh? การแก้ไขปัญหาเพิ่มเติม การใช้เส้นทางตรงใน shebang แทนที่จะenvสร้างพฤติกรรมแบบเดียวกัน ไปป์กับechoแทนที่จะใช้ที่นี่สตริง&lt;&lt;&lt;$lineยังสร้างลักษณะการทำงานเดียวกัน echo $line | cut -f 2กล่าวคือ ใช้awkแทนการcut …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.