ฉันกำลังพยายามสร้าง #!/bin/sh ฟังก์ชัน string_split ที่เข้ากันได้ซึ่งมีไวยากรณ์คำสั่งที่คล้ายกันกับคำสั่ง read เพื่อให้คุณสามารถส่งผ่านสตริงที่คุณต้องการแยกและตัวแปรที่คุณต้องการกำหนดสตริงด้วย
นี่คือฟังก์ชันที่ฉันคิดขึ้นมา แต่ฉันไม่สามารถหาวิธีทำให้ค่าใหม่ที่มีอยู่นอกฟังก์ชันเหมือนกับที่คำสั่ง read ทำได้
#!/bin/sh
split_str() {
input_original=$1
อินพุต = $1
input_delimiter=$2
อินพุต=$(เสียงสะท้อน "$อินพุต" | sed -e "s/$input_delimiter/ /g")
ชุด -- "$input_original" "$input_delimiter" $อินพุต
}
การใช้คำสั่งที่ต้องการจะมีลักษณะดังนี้:
split_str "สวัสดีชาวโลก" " " word1 word2
เสียงสะท้อน "$word1"
# เอาต์พุต: สวัสดี
เสียงสะท้อน "$word2"
# เอาต์พุต: โลก
สารละลาย
การใช้คำตอบของ bac0ns ด้านล่างฉันสามารถรับโซลูชันนี้ซึ่งใช้งานได้กับพารามิเตอร์เอาต์พุตจำนวนเท่าใดก็ได้ที่ส่งผ่าน ขอบคุณสำหรับความช่วยเหลือ @bac0n
#!/bin/sh
split_str() {
อินพุต = $1
input_delimiter=$2
# แยกพารามิเตอร์เอาต์พุต
output_params=$(echo "${@}" | sed -e "s/$input $input_delimiter//g")
# เพิ่มอาร์กิวเมนต์ตัวแปรพิเศษเพื่อตรวจจับการล้น
# สิ่งนี้จะป้องกันไม่ให้ส่วนพิเศษใด ๆ ของสตริงย่อยถูกเพิ่มลงใน
#ผ่านพารามิเตอร์
output_params="$output_params ล้น"
# แยกสตริงโดยการอ่านค่าด้วยการอ่าน
IFS="$input_delimiter" อ่าน -r $output_params << EOF
1 ดอลลาร์
อฟ
}