Tôi nghĩ rằng sự thay thế và bash biến bash hoạt động ở độ phân giải ký tự , vì vậy tôi khá ngạc nhiên khi thấy nó hoạt động ở mức byte .
Mọi thứ trong tôi locale
là en_AU.UTF-8
Khi không có gì phù hợp và mẫu cho phép từ 0 đến nhiều, sự thay thế xảy ra ở mức byte , như được thấy trong các thay thế tiếp theo. Tôi đã mong nó sẽ chuyển sang nhân vật tiếp theo , nhưng nó không ...
Có lẽ đây chỉ là một mô hình trường hợp rìa, hoặc tôi đang thiếu một cái gì đó rõ ràng, nhưng tôi tự hỏi điều gì đang xảy ra ở đây, và tôi có thể mong đợi hành vi này ở nơi nào khác ngoài mô hình cụ thể này không?
Đây là kịch bản (bắt đầu như một nỗ lực để tách một chuỗi thành các ký tự).
Tôi hy vọng rằng bài kiểm tra cuối cùng, với ký tự ळ
, sẽ chỉ có một khoảng trắng duy nhất ở trước ळ
, nhưng thay vào đó, 3 byte UTF-8 của ký tự được đặt trước một khoảng trắng. Điều này dẫn đến đầu ra UTF-8 không hợp lệ.
shopt -s extglob
for str in $'\t' "ab" ळ ;do
printf -- '%s' "${str//*($'\x01')/ }" |xxd
done
Đầu ra:
0000000: 2009 .
0000000: 2061 2062 a b
0000000: 20e0 20a4 20b3 . . .