Tôi muốn tách 'hello'
thành h e l l o
một mảng chỉ bằng bash, tôi có thể làm điều đó trong sed với sed 's/./& /g'
nhưng tôi muốn biết làm thế nào để tách một chuỗi thành một mảng trong Bash khi tôi không biết dấu phân cách sẽ là gì, hoặc dấu phân cách là bất kỳ nhân vật duy nhất. Tôi không nghĩ rằng tôi có thể sử dụng ${i// /}
mà không có một số sáng tạo vì dấu phân cách là không xác định và tôi không nghĩ biểu thức đó chấp nhận regex. Tôi đã thử sử dụng BASH_REMATCH với [[string = ~ ([az].). *]] Nhưng nó không hoạt động như tôi mong đợi. Cách thích hợp để chỉ sử dụng bash để thực hiện một string.split()
loại hành vi là gì? Lý do là tôi đang cố gắng viết tiện ích rev trong tất cả bash:
while read data; do
word=($(echo $data|tr ' ' '_'|sed 's/./& /g'))
new=()
i=$((${#word[@]} - 1))
while [[ $i -ge 0 ]]; do
new+=(${word[$i]})
(( i-- ))
done
echo ${new[@]}|tr -d ' '|tr '_' ' '
done
Nhưng tôi đã sử dụng tr và sed, tôi muốn biết làm thế nào để phân chia đúng cách và sau đó tôi sẽ sửa nó để được tất cả bash. Chỉ để cho vui.
[[ $string =~ ${string//?/(.)} ]]
sẽ đặt BASH_REMATCH[]
theo yêu cầu, xem câu trả lời của tôi cho câu hỏi Peter Mortensen liên kết để giải thích.