คำถามติดแท็ก bourne-shell

4
อาร์เรย์ใน Unix Bourne Shell
ฉันพยายามใช้อาร์เรย์ใน Bourne shell ( /bin/sh) ฉันพบว่าวิธีการเริ่มต้นองค์ประกอบอาร์เรย์คือ: arr=(1 2 3) แต่พบข้อผิดพลาด: syntax error at line 8: `arr=' unexpected ตอนนี้โพสต์ที่ฉันพบไวยากรณ์นี้บอกว่ามันมีไว้สำหรับbashแต่ฉันไม่สามารถหาไวยากรณ์ที่แยกต่างหากสำหรับเชลล์เป้าหมาย ไวยากรณ์มีความเหมือน/bin/shกันหรือไม่

3
ใช้ ^ เป็นตัวบ่งชี้เชลล์
ฉันเขียนสคริปต์เล็ก ๆ วันนี้ซึ่งมี grep -q ^local0 /etc/syslog.conf ในระหว่างการตรวจสอบผู้ร่วมงานแนะนำ^local0ให้เสนอราคาเพราะ^หมายถึง "ท่อ" ในเชลล์เป้าหมาย ฉันได้พยายามติดตามข้อมูลอ้างอิงที่กล่าวถึงสิ่งนี้ ไม่พบสิ่งใดบนอินเทอร์เน็ตที่แนะนำว่านี่เป็นปัญหา อย่างไรก็ตามปรากฎว่าการใช้งานbsh(ซึ่งอ้างว่าเป็นเชลล์เป้าหมาย) บน AIX 7 มีลักษณะการทำงานนี้: > bsh $ ls ^ wc 23 23 183 $ ls | wc 23 23 183 ไม่มีการใช้งาน "บอร์นเชลล์" อื่นใดที่ฉันพยายามทำในลักษณะนี้ (นั่น^คือไม่ถือว่าเป็นเชลล์เมตาอักขระเลย) ฉันลองใช้shCentOS (ซึ่งทุบตีจริงๆ) และshFreeBSD (ซึ่งไม่ใช่ทุบตี) ฉันไม่มีระบบอื่น ๆ ให้ลอง พฤติกรรมนี้คาดหวังหรือไม่? เชลล์ตัวไหนที่คิดว่า^เป็นตัวชี้ตำแหน่งท่อ?

4
วิธีการแตกสตริงที่ยาวเป็นหลายบรรทัดในพร้อมต์ read -p ภายในซอร์สโค้ด?
/bin/shฉันจะเขียนสคริปต์การติดตั้งที่จะใช้เป็น มีบรรทัดแจ้งให้ไฟล์: read -p "goat can try change directory if cd fails to do so. Would you like to add this feature? [Y|n] " REPLY ฉันต้องการแบ่งบรรทัดยาวเป็นหลายบรรทัดเพื่อไม่ให้มีเกิน 80 อักขระ ฉันกำลังพูดถึงบรรทัดภายในซอร์สโค้ดของสคริปต์ ไม่เกี่ยวกับบรรทัดที่จะพิมพ์จริงบนหน้าจอเมื่อสคริปต์ถูกดำเนินการ! สิ่งที่ฉันได้ลอง: วิธีการเริ่ม: read -p "goat can try change directory if cd fails to do so. " \ "Would you like …

5
มีตัวดำเนินการ "in" ใน bash / bourne หรือไม่?
ฉันกำลังมองหาโอเปอเรเตอร์“ in” ที่ใช้งานได้เช่นนี้: if [ "$1" in ("cat","dog","mouse") ]; then echo "dollar 1 is either a cat or a dog or a mouse" fi เห็นได้ชัดว่ามันเป็นคำสั่งที่สั้นกว่าเมื่อเปรียบเทียบกับพูดโดยใช้การทดสอบหลาย ๆ แบบหรือ

1
IFS null ไม่เหมือนกับ IFS unset หรือไม่
ผมอ่านคำถามที่ดีที่นี่เรียกว่าเข้าใจไอเอฟเอ ฉันรู้สึกประหลาดใจเพราะคำตอบและความคิดเห็นอ้างถึง POSIX ซึ่งระบุว่า IFS = ไม่เหมือนกับการยกเลิกการตั้งค่า IFS หากคุณยกเลิกการตั้งค่า IFS จะเห็นได้ว่ามีการใช้ค่าเริ่มต้น ถ้าคุณทำให้ IFS เป็นโมฆะแทนจะไม่มีตัวแยก ฉันรู้ว่าฉันเคยเห็นสิ่งที่แตกต่างและฉันพบสิ่งนี้ในบุ๊คมาร์คของฉัน: การเขียนโปรแกรม Bourne Shell $ ไอเอฟเอ ข้อความแรกสุดในสคริปต์ของคุณควรเป็น ไอเอฟเอ = ซึ่งรีเซ็ตตัวคั่นฟิลด์อินพุตเป็นค่าดีฟอลต์ มิฉะนั้นคุณจะสืบทอด $ IFS จากผู้ใช้ซึ่งอาจจะตั้งค่าเป็นค่าที่แปลกประหลาดบางอย่างเพื่อสร้างสตริงการแยกวิเคราะห์ที่แตกต่างจากที่คุณคาดไว้และทำให้เกิดพฤติกรรมแปลก ๆ เป็นเช่นนั้นจริงเมื่อไม่นานมานี้หรือผู้แต่งผิดพลาด

3
ไวยากรณ์ที่ถูกต้อง“ $ {PS1-}” และแตกต่างจากธรรมดา“ $ PS1” อย่างไร
ฉันกำลังดูสคริปต์ที่มี: if [ "${PS1-}" ]; then การติดตามนั้นทำให้-ฉันรำคาญเล็กน้อยเพราะดูเหมือนว่าจะไม่ได้ Posix หรือ Bash ไวยากรณ์มาตรฐาน นี่คือไวยากรณ์ที่ซ่อนเร้นอยู่ตลอดกาลหรือเป็นตัวพิมพ์ผิด การอ้างอิงใด ๆ ถึงมาตรฐาน / เอกสารจะได้รับการชื่นชม ปกติฉันจะรหัสมัน if [ "$PS1" ]; then ข้อใดถูกกว่าหรือมีข้อแตกต่างระหว่างกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.