จะนำเสนออินพุตที่แก้ไขได้ให้กับผู้ใช้ด้วย BASH และ ZSH ได้อย่างไร

ฉันต้องยอมรับอินพุตของผู้ใช้ภายในเชลล์สคริปต์ที่สามารถทำงานได้ทั้งใน BASH และ ZSH ฉันคุ้นเคยกับการใช้ readline ในภาษาอื่น แต่ดูเหมือนว่าจะไม่ใช่ตัวเลือกที่ใช้งานได้ในการเขียนเชลล์สคริปต์

ตัวอย่างพรอมต์อาจเป็น:

Please enter the value> 1234_

ฉันจะนำเสนอผู้ใช้ด้วยอินพุตที่แก้ไขได้ซึ่งมีค่าเริ่มต้นที่สามารถแก้ไขได้ (backspaced) ที่เข้ากันได้กับทั้งสองเชลล์ได้อย่างไร


person ylluminate    schedule 13.06.2019    source แหล่งที่มา
comment
ด้วยการทุบตี: read -e -p 'Please enter the value> ' -i '1234'   -  person Cyrus    schedule 13.06.2019
comment
สำหรับ zsh คุณอาจต้องการดู vared บิวด์อิน ของโมดูล ZLE . มันเป็นการเดานะ i=1234; vared -p 'Please enter the value> ' i   -  person Toby Speight    schedule 13.06.2019
comment
ไม่มีสิ่งใดที่จะทำงานในทั้งสองเชลล์ได้ เนื่องจากแต่ละเชลล์ใช้ตัวแก้ไขบรรทัดที่แตกต่างกัน (Readline สำหรับ bash, ZLE สำหรับ zsh)   -  person chepner    schedule 13.06.2019
comment
@ไซรัส ขอบคุณ! คุณทำให้วันของฉัน :-) คุณอาจต้องการรวมตัวแปร (เช่น เรียกว่าคำตอบ) ที่คุณเก็บอินพุตของผู้ใช้: read -e -p 'Please enter the value> ' -i '1234' answer ผลลัพธ์ในลักษณะเช่น: Please enter the value> 1236 แสดงอินพุตของผู้ใช้ที่แก้ไข เช่น: echo "$answer" 1236   -  person Bernie Reiter    schedule 16.07.2020
comment
@BernieReiter: แน่นอนว่าเป็นไปได้ แต่ไม่จำเป็นอย่างยิ่ง หากไม่มีการระบุตัวแปร read จะใช้ตัวแปร REPLY แน่นอนว่าโค้ดจะเข้าใจง่ายกว่าถ้าคุณระบุตัวแปร   -  person Cyrus    schedule 16.07.2020
comment
@Cyrus ขอบคุณอีกครั้ง! เรียนรู้สิ่งใหม่และคุ้มค่าทุกวัน :-)   -  person Bernie Reiter    schedule 16.07.2020


คำตอบ (1)


หากฉันไม่เข้าใจผิด ... ในแง่ของฟังก์ชัน "Backspace" ให้ลบอักขระตัวสุดท้ายและเพิ่มใหม่ .. ใช้งานได้ในทั้งสองเชลล์ด้วยการ "อ่าน" แบบง่ายในสคริปต์

echo -n "Enter value > "
read v
echo $v

หากคุณมีปัญหาอื่นๆ โปรดเรียบเรียงใหม่เพื่อให้คำถามของคุณชัดเจนยิ่งขึ้น คุณใช้อะไร (รหัสตัวอย่าง) คุณทำอะไรกันแน่ในแง่ของการแก้ไข (เฉพาะ BS หรือคุณหมายถึงคำสั่งแก้ไขบรรทัด CTRL-A ฯลฯ ) ผลลัพธ์ / ข้อผิดพลาดคืออะไร สิ่งที่คุณต้องการแก้ไข ขอบคุณ.

person ennox    schedule 13.06.2019
comment
ฉันไม่รู้ zsh เลย แต่จากมุมมองของ Bash: echo -n ไม่สามารถพกพาได้ read นอกเหนือจากที่จุดเริ่มต้นของบรรทัดจะทำให้แนวคิดของ readline เกี่ยวกับตำแหน่งคอลัมน์สับสน นั่นเป็นสาเหตุที่ read มีตัวเลือก -p - person Toby Speight; 13.06.2019
comment
สิ่งนี้ไม่ได้ระบุ ค่าเริ่มต้น ซึ่งเป็นประเด็นหลักของคำถาม - person Toby Speight; 13.06.2019