Tôi đang cố gắng tạo một hàm string_split tương thích #!/bin/sh có cú pháp lệnh tương tự như lệnh đọc để bạn có thể chuyển chuỗi bạn muốn tách và các biến bạn muốn gán chuỗi nữa.
Đây là chức năng tôi đã nghĩ ra, nhưng tôi không thể tìm ra cách làm cho các giá trị mới có sẵn bên ngoài chức năng như lệnh đọc có thể làm được.
#!/bin/sh
split_str() {
input_ original=$1
đầu vào=$1
input_delimiter=$2
đầu vào=$(echo "$input" | sed -e "s/$input_delimiter/ /g")
đặt -- "$input_origin" "$input_delimiter" $input
}
Việc sử dụng lệnh mong muốn sẽ như thế này:
split_str "Xin chào thế giới" " " từ1 từ2
tiếng vang "$word1"
# Đầu ra: Xin chào
tiếng vang "$word2"
# Đầu ra: Thế giới
Dung dịch
Sử dụng câu trả lời bac0ns bên dưới, tôi có thể nhận được giải pháp này hoạt động với bất kỳ số lượng tham số đầu ra nào được thông qua. Cảm ơn đã giúp đỡ @bac0n
#!/bin/sh
split_str() {
đầu vào=$1
input_delimiter=$2
# Cô lập các tham số đầu ra
output_params=$(echo "${@}" | sed -e "s/$input $input_delimiter//g")
# Thêm một đối số biến bổ sung để bắt bất kỳ lỗi tràn nào.
# Điều này ngăn không cho bất kỳ phần bổ sung nào của chuỗi con được thêm vào
# tham số đã truyền.
output_params="$output_params tràn"
# Tách chuỗi bằng cách đọc các giá trị bằng read
IFS="$input_delimiter" read -r $output_params << EOF
$1
EOF
}