Làm thế nào để bạn lặp lại một ký tự Unicode 4 chữ số trong Bash?


224

Tôi muốn thêm hộp sọ Unicode và xương chéo vào dấu nhắc shell của mình (cụ thể là 'SKULL VÀ CROSSBONES' (U + 2620)), nhưng tôi không thể tìm ra câu thần chú để tạo ra tiếng vang nhổ nó, hoặc bất kỳ thứ gì khác, Ký tự Unicode gồm 4 chữ số. Một chữ số là một chữ số dễ dàng. Ví dụ: echo -e "\ x55" ,.

Ngoài các câu trả lời dưới đây, cần lưu ý rằng, rõ ràng, thiết bị đầu cuối của bạn cần hỗ trợ Unicode cho đầu ra là những gì bạn mong đợi. gnome-terminal thực hiện tốt công việc này, nhưng nó không nhất thiết phải được bật theo mặc định.

Trên ứng dụng Terminal của macOS, hãy vào Tùy chọn-> Mã hóa và chọn Unicode (UTF-8).


7
Lưu ý rằng nhận xét "2 chữ số của bạn rất dễ (lặp lại)" chỉ hợp lệ đối với các giá trị "\x7F"trong một ngôn ngữ UTF-8 (mà bashthẻ gợi ý là của bạn) ... các mẫu được biểu thị bằng một byte đơn không bao giờ nằm ​​trong phạm vi \x80-\xFF. Phạm vi này là bất hợp pháp trong ký tự UTF-8 singl-byte. ví dụ: giá trị Codepoint Unicode của U+0080(nghĩa là \x80) thực sự là 2 byte trong UTF-8 .. \xC2\x80..
Peter.O

4
Ví dụ printf "\\u007C\\u001C".
kenorb

NB: đối với tôi gnome-terminal, echo -e '\ufc'không tạo ra ü, ngay cả với mã hóa ký tự được đặt thành UTF-8. Tuy nhiên, ví dụ như urxvtin, ví dụ printf "\\ub07C\\ub01C"như mong đợi (không phải với hoặc hộp).
đẳng cấu

@ Peter.O Tại sao bashthẻ như vậy là một gợi ý hữu ích? Các thiết bị đầu cuối khác nhau có phổ biến trong CJK hoặc không?
đẳng cấu

1
@ Peter.O zsh, fish, scsh, elvish, v.v ... có nhiều shell khác nhau, mỗi shell có thể xử lý các ký tự unicode theo cách họ muốn (hoặc không). "Bash" làm cho nó rõ ràng câu hỏi này không phải là về một cái vỏ kỳ lạ làm mọi thứ khác đi.
masukomi

Câu trả lời:


237

Trong UTF-8, nó thực sự gồm 6 chữ số (hoặc 3 byte).

$ printf '\xE2\x98\xA0'

Để kiểm tra cách mã hóa bởi bảng điều khiển, hãy sử dụng hexdump:

$ printf  | hexdump
0000000 98e2 00a0                              
0000003

5
Đầu ra của tôi "" thay vì ☠ ... Tại sao vậy?
trusktr

8
Đúng. Tôi phát hiện ra tôi đang sử dụng LANG=Cthay vì LANG=en_US.UTF-8. Bây giờ các thiết bị đầu cuối của tôi trong Gnome hiển thị các ký hiệu chính xác ... Các thiết bị đầu cuối thực sự (tty1-6) vẫn không mặc dù.
trusktr

6
Đối với những người đang thử một hexdump: 0000000 f0 9f 8d badịch sang \xf0\x9f\x8d\xba. Tiếng vang ví dụ : echo -e "\xf0\x9f\x8d\xba".
Blaise

8
Bạn cũng có thể sử dụng $'...'cú pháp để đưa ký tự được mã hóa vào một biến mà không cần sử dụng một khung con $(...)bắt giữ, để sử dụng trong các bối cảnh không tự giải thích các chuỗi thoát:skull=$'\xE2\x98\xA0'
Andrew Janke

7
Một điều khác về hexdump: trên máy của tôi, lệnh thứ hai trong câu trả lời đầu ra 0000000 98e2 00a0. Tất nhiên, 0000000đây chỉ là một phần bù không quan trọng, nhưng các byte sau khi dịch thành \xe2\x98\xa0, bởi vì máy sử dụng thứ tự byte cuối nhỏ.
sigalor

98
% echo -e '\u2620'     # \u takes four hexadecimal digits

% echo -e '\U0001f602' # \U takes eight hexadecimal digits
😂

Điều này hoạt động trong Zsh (Tôi đã kiểm tra phiên bản 4.3) và trong Bash 4.2 hoặc mới hơn.


16
nó chỉ phun ra \ u2620 khi tôi làm điều đó.
masukomi

Cho tôi nữa. Bạn đang sử dụng vỏ nào, Juliano?
Joachim Sauer

2
Xin lỗi, quên nói rằng tôi sử dụng zsh.
Juliano

32
Hỗ trợ cho \ u đã được thêm vào trong Bash 4.2.
Lri

4
KHÔNG hoạt động đối với tôi, Mac OS 10.14.2, bash (GNU bash, phiên bản 3.2.57 (1) -release (x86_64-apple-darwin18)). Nó chỉ in ra đầu vào - $ echo -e '\ u2620' <enter> chỉ đơn giản là in ra: \ u2620
Motti Shneor

68

Miễn là trình soạn thảo văn bản của bạn có thể đối phó với Unicode (có thể được mã hóa bằng UTF-8), bạn có thể nhập trực tiếp điểm mã Unicode.

Chẳng hạn, trong trình soạn thảo văn bản Vim , bạn sẽ vào chế độ chèn và nhấn Ctrl+ V+ Uvà sau đó là số điểm mã dưới dạng số thập lục phân 4 chữ số (pad có số 0 nếu cần). Vì vậy, bạn sẽ gõ Ctrl+ V+ U 2 6 2 0. Xem: Cách dễ nhất để chèn các ký tự Unicode vào tài liệu là gì?

Tại một thiết bị đầu cuối chạy Bash, bạn sẽ gõ CTRL+ SHIFT+ Uvà nhập điểm mã thập lục phân của ký tự bạn muốn. Trong quá trình nhập, con trỏ của bạn sẽ hiển thị phần gạch chân u. Chữ số đầu tiên bạn nhập kết thúc đầu vào và hiển thị ký tự. Vì vậy, bạn có thể in U + 2620 bằng Bash bằng cách sau:

echo CTRL+ SHIFT+U2620ENTERENTER

(Lần nhập đầu tiên kết thúc đầu vào Unicode và lần thứ hai chạy echolệnh.)

Tín dụng: Hỏi Ubuntu SE


1
Một nguồn tin tốt cho các điểm mã hexademical là unicodelookup.com/#0x2620/1
RobM

1
Phiên bản của vim tôi đang sử dụng (7.2.411 trên RHEL 6.3) không phản hồi như mong muốn khi có một dấu chấm giữa ctrl-v và u, nhưng hoạt động tốt khi bỏ qua dấu chấm đó.
Chris Johnson

@ChrisJohnson: Tôi đã xóa khoảng thời gian khỏi hướng dẫn, nó không có ý định nhấn phím (đó là lý do tại sao nó không xuất hiện với hiệu ứng bàn phím). Xin lỗi vì sự nhầm lẫn.
RobM

5
Coi chừng: điều này chỉ hoạt động trong một thiết bị đầu cuối chạy Bash nếu bạn đang chạy nó trong môi trường GTK + , dưới dạng Gnome.
nr

1
Khả năng C-S-u 2 6 2 0là một tính năng của trình giả lập thiết bị đầu cuối của bạn, Phương thức nhập liệu X (XIM) hoặc tương tự. AFAIK, bạn sẽ không thể gửi cả SHIFTCTRLđến lớp thiết bị đầu cuối. Thiết bị đầu cuối chỉ nói bằng các ký tự, thay vì bằng các phím và mã phím như máy chủ X của bạn (đồng thời, nó là 7 bit cho tất cả các ý định và mục đích). Trong thế giới này, CTRLche dấu 4 bit quan trọng nhất (& 0b00001111) dẫn đến
nabin-thông tin

31

Đây là một triển khai Bash hoàn toàn nội bộ, không giới hạn, kích thước không giới hạn của các ký tự Unicode.

fast_chr() {
    local __octal
    local __char
    printf -v __octal '%03o' $1
    printf -v __char \\$__octal
    REPLY=$__char
}

function unichr {
    local c=$1    # Ordinal of char
    local l=0    # Byte ctr
    local o=63    # Ceiling
    local p=128    # Accum. bits
    local s=''    # Output string

    (( c < 0x80 )) && { fast_chr "$c"; echo -n "$REPLY"; return; }

    while (( c > o )); do
        fast_chr $(( t = 0x80 | c & 0x3f ))
        s="$REPLY$s"
        (( c >>= 6, l++, p += o+1, o>>=1 ))
    done

    fast_chr $(( t = p | c ))
    echo -n "$REPLY$s"
}

## test harness
for (( i=0x2500; i<0x2600; i++ )); do
    unichr $i
done

Đầu ra là:

─━│┃┄┅┆┇┈┉┊┋┌┍┎┏
┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟
┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯
┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿
╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏
═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟
╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯
╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿
▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏
▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟
■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯
▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿
◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●
◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟
◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯
◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿

Tôi rất tò mò lý do đằng sau phương pháp làm tròn và việc sử dụng cụ thể của biến REPLY. Tôi giả sử bạn đã kiểm tra nguồn bash hoặc chạy qua hoặc một cái gì đó để tối ưu hóa, tôi có thể thấy các lựa chọn của bạn có thể tối ưu hóa như thế nào, mặc dù phụ thuộc rất nhiều vào trình thông dịch).
nabin-thông tin

14

Chỉ cần đặt "☠" trong tập lệnh shell của bạn. Trong ngôn ngữ chính xác và trên bảng điều khiển hỗ trợ Unicode, nó sẽ in tốt:

$ echo 

$

Một "cách giải quyết" xấu xí sẽ là xuất ra chuỗi UTF-8, nhưng điều đó cũng phụ thuộc vào mã hóa được sử dụng:

$ echo -e '\xE2\x98\xA0'

$

13

Nhanh chóng một lớp để chuyển đổi các ký tự UTF-8 thành định dạng 3 byte của chúng:

var="$(echo -n '☠' | od -An -tx1)"; printf '\\x%s' ${var^^}; echo

5
Tôi sẽ không gọi ví dụ trên nhanh chóng (với 11 lệnh và thông số của chúng) ... Ngoài ra, nó chỉ xử lý 3 ký tự UTF-8 byte (ký tự UTF-8 có thể là 1, 2 hoặc 3 byte) ... ngắn hơn một chút và hoạt động với 1-3 ++++ byte: printf "\\\x%s" $(printf '☠'|xxd -p -c1 -u).... xxd được vận chuyển như một phần của gói 'vim-common'
Peter.O

PS: Tôi chỉ nhận thấy rằng ví dụ hexdump / awk ở trên đang xoay chuỗi byte trong một cặp byte. Điều này không áp dụng cho bãi chứa UTF-8. Nó sẽ là relavent thể nó là một bãi chứa của UTF-16LE và muốn đầu ra Unicode codepoints , nhưng nó không có ý nghĩa ở đây là các đầu vào là UTF-8 và đầu ra là chính xác như đầu vào (cộng với \ x trước mỗi hexdigit -Số)
Peter.O

7
Các ký tự UTF-8 có thể là các chuỗi 1 - 4 byte
cms

1
dựa trên nhận xét của @ Peter.O, tôi thấy như sau, trong khi lớn hơn, khá tiện dụng:hexFromGlyph(){ if [ "$1" == "-n" ]; then outputSeparator=' '; shift; else outputSeparator='\n'; fi for glyph in "$@"; do printf "\\\x%s" $(printf "$glyph"|xxd -p -c1 -u); echo -n -e "$outputSeparator"; done } # usage: $ hexFromGlyph ☠ ✿ \xE2\x98\xA0 \xE2\x9C\xBF $ hexFromGlyph -n ☠ ✿ \xE2\x98\xA0 \xE2\x9C\xBF
StephaneAG

2
Người đàn ông tốt bụng. Xem xét: codepoints () { printf 'U+%04x\n' ${@/#/\'} ; } ; codepoints A R ☯ 🕉 z ... thưởng thức 👍
nabin-thông tin

8

Tôi đang sử dụng cái này:

$ echo -e '\u2620'

Điều này khá dễ dàng hơn so với tìm kiếm một đại diện hex ... Tôi đang sử dụng điều này trong các tập lệnh shell của mình. Điều đó hoạt động trên gnome-term và urxvt AFAIK.


2
@masukomi nếu bạn biết cách sử dụng brew, bạn có thể cài đặt một bash gần đây hơn và sử dụng nó. Ở trên hoạt động tốt trên thiết bị đầu cuối mac của tôi khi sử dụng bash nâng cấp.
mcheema

Vâng, điều đó tốt với các phiên bản mới hơn của bash. Các chuỗi nhắc nhanh hơn, ví dụ $ PS1 không sử dụng các định dạng thoát echo
cms

6

Bạn có thể cần mã hóa điểm mã dưới dạng bát phân để mở rộng nhanh chóng để giải mã chính xác.

Mã hóa U + 2620 dưới dạng UTF-8 là E2 98 A0.

Vì vậy, trong Bash,

export PS1="\342\230\240"

sẽ làm cho vỏ của bạn nhanh chóng vào hộp sọ và xương.


xin chào, mã mà tôi nên nhập cho "e0 b6 85" là gì? Làm thế nào tôi có thể tìm thấy nó?
Udayantha Udy Warnasuriya

chỉ cần chuyển đổi các số thập lục phân (cơ số 16) e0 b6 85 thành số bát phân (cơ sở 8) - sử dụng máy tính có lẽ là cách dễ nhất để làm điều này
cms

e0 b6 85 hex là 340 266 205 bát phân
cms

Điều này đã làm việc, cảm ơn rất nhiều! Và btw, bạn có thể tìm phiên bản bát phân tại các trang này: graphemica.com/%E2%9B%B5
Perlnika

6

Trong bash để in một ký tự Unicode thành đầu ra, hãy sử dụng \ x, \ u hoặc \ U (thứ nhất cho hex 2 chữ số, thứ hai cho hex 4 chữ số, thứ ba cho bất kỳ độ dài nào)

echo -e '\U1f602'

Tôi muốn gán nó cho một biến sử dụng cú pháp $ '...'

x=$'\U1f602'
echo $x

5

Nếu bạn không phiền một lớp lót Perl:

$ perl -CS -E 'say "\x{2620}"'

-CScho phép giải mã UTF-8 trên đầu vào và mã hóa UTF-8 ở đầu ra. -Eđánh giá đối số tiếp theo là Perl, với các tính năng hiện đại như sayđược bật. Nếu bạn không muốn một dòng mới ở cuối, hãy sử dụng printthay vì say.


5

Bất kỳ lệnh nào trong ba lệnh này sẽ in ký tự bạn muốn trong bảng điều khiển, miễn là bàn điều khiển chấp nhận các ký tự UTF-8 (hầu hết các lệnh hiện tại đều làm):

echo -e "SKULL AND CROSSBONES (U+2620) \U02620"
echo $'SKULL AND CROSSBONES (U+2620) \U02620'
printf "%b" "SKULL AND CROSSBONES (U+2620) \U02620\n"

SKULL AND CROSSBONES (U+2620) 

Sau đó, bạn có thể sao chép và dán glyph (hình ảnh, ký tự) thực tế vào bất kỳ trình soạn thảo văn bản (bật UTF-8) nào.

Nếu bạn cần xem cách Mã điểm Unicode như vậy được mã hóa trong UTF-8, hãy sử dụng xxd (trình xem hex tốt hơn nhiều so với od):

echo $'(U+2620) \U02620' | xxd
0000000: 2855 2b32 3632 3029 20e2 98a0 0a         (U+2620) ....

That means that the UTF8 encoding is: e2 98 a0

Hoặc, trong HEX để tránh lỗi: 0xE2 0x98 0xA0. Đó là, các giá trị giữa không gian (HEX 20) và Nguồn cấp dữ liệu (Hex 0A).

Nếu bạn muốn đi sâu vào việc chuyển đổi số thành ký tự: hãy nhìn vào đây để xem một bài viết từ wiki của Greg (BashFAQ) về mã hóa ASCII trong Bash!


re: "Hoặc, trong HEX để tránh lỗi ..." Tôi hầu như không nghĩ rằng việc chuyển đổi một unicode char thành một số mã hóa nhị phân mà bạn thể hiện bằng ký tự hex, giúp tránh lỗi. Sử dụng ký hiệu unicode trong "bash" sẽ tốt hơn tránh các lỗi, ví dụ: "\ uHHHH --- ký tự Unicode (ISO / IEC 10646) có giá trị là ---- giá trị thập lục phân HHHH (một đến bốn chữ số hex); \ UHHHHHHH ---- ký tự Unicode (ISO / IEC 10646) có giá trị là ---- giá trị thập lục phân HHHHHHHH (một đến tám chữ số hex)
Astara

4

Nội dung printfdựng sẵn (giống như coreutils ' printf) biết \uchuỗi thoát chấp nhận các ký tự Unicode 4 chữ số:

   \uHHHH Unicode (ISO/IEC 10646) character with hex value HHHH (4 digits)

Kiểm tra với Bash 4.2.37 (1):

$ printf '\u2620\n'

printf cũng là một vỏ tích hợp. Có lẽ bạn đang sử dụng bash macOS mặc định (v3). Hãy thử \printfsử dụng chương trình thực thi độc lập hoặc thử với bash được nâng cấp
mcint

4

Xin lỗi vì đã làm sống lại câu hỏi cũ này. Nhưng khi sử dụng, bashcó một cách tiếp cận rất dễ dàng để tạo các điểm mã Unicode từ đầu vào ASCII đơn giản, thậm chí không hoàn toàn rẽ nhánh :

unicode() { local -n a="$1"; local c; printf -vc '\\U%08x' "$2"; printf -va "$c"; }
unicodes() { local a c; for a; do printf -vc '\\U%08x' "$a"; printf "$c"; done; };

Sử dụng nó như sau để xác định các điểm mã nhất định

unicode crossbones 0x2620
echo "$crossbones"

hoặc để đổ mã hóa đơn mã 65536 đầu tiên vào thiết bị xuất chuẩn (mất ít hơn 2 giây trên máy của tôi. Không gian bổ sung là để ngăn các ký tự nhất định chảy vào nhau do phông chữ đơn cách của shell):

for a in {0..65535}; do unicodes "$a"; printf ' '; done

hoặc để kể một câu chuyện nhỏ của cha mẹ rất điển hình (điều này cần Unicode 2010):

unicodes 0x1F6BC 32 43 32 0x1F62D 32 32 43 32 0x1F37C 32 61 32 0x263A 32 32 43 32 0x1F4A9 10

Giải trình:

  • printf '\UXXXXXXXX' in ra bất kỳ ký tự Unicode nào
  • printf '\\U%08x' numberin \UXXXXXXXXvới số được chuyển đổi thành Hex, sau đó được đưa sang số khác printfđể thực sự in ký tự Unicode
  • printf nhận ra bát phân (0oct), hex (0xHEX) và thập phân (0 hoặc số bắt đầu bằng 1 đến 9) là số, vì vậy bạn có thể chọn đại diện nào phù hợp nhất
  • printf -v var ..tập hợp đầu ra của printfmột biến, không có ngã ba (giúp tăng tốc rất nhiều thứ)
  • local variable ở đó để không gây ô nhiễm không gian tên toàn cầu
  • local -n var=otherbí danh varđể other, rằng nhiệm vụ như vậy để varlàm thay đổi other. Một phần thú vị ở đây là, đó varlà một phần của không gian tên cục bộ, trong khi đó otherlà một phần của không gian tên toàn cầu.
    • Xin lưu ý rằng không có thứ như localhoặc globalkhông gian tên trong bash. Các biến được giữ trong môi trường và như vậy luôn luôn là toàn cầu. Local chỉ cần loại bỏ giá trị hiện tại và khôi phục nó khi chức năng được để lại. Các hàm khác được gọi từ bên trong hàm localvẫn sẽ thấy giá trị "cục bộ". Đây là một khái niệm khác về cơ bản so với tất cả các quy tắc phạm vi thông thường được tìm thấy trong các ngôn ngữ khác (và những gì bashrất mạnh mẽ nhưng có thể dẫn đến lỗi nếu bạn là một lập trình viên không nhận thức được điều đó).

tốt - không làm việc gì cho tôi cả. mọi nỗ lực sử dụng bất kỳ chức năng nào của bạn, phát ra: dòng 6: local: -n: không hợp lệ tùy chọn cục bộ: cách sử dụng: tên cục bộ [= value] ... Tôi đang sử dụng MacOS và bash (GNU bash mới nhất) , phiên bản 3.2.57 (1) -release (x86_64-apple-darwin18))
Motti Shneor

4

Dưới đây là danh sách tất cả các biểu tượng cảm xúc unicode có sẵn:

https://en.wikipedia.org/wiki/Emoji#Unicode_blocks

Thí dụ:

echo -e "\U1F304"
🌄

Để lấy giá trị ASCII của ký tự này, hãy sử dụng hexdump

echo -e "🌄" | hexdump -C

00000000  f0 9f 8c 84 0a                                    |.....|
00000005

Và sau đó sử dụng các giá trị được thông báo ở định dạng hex

echo -e "\xF0\x9F\x8C\x84\x0A"
🌄

lặp lại chuỗi \ U <hex> không hoạt động trên OSX, nó chỉ xuất ra chính xác những gì trong dấu ngoặc kép.
masukomi


2

Dễ dàng với Python2 / 3 one-liner:

$ python -c 'print u"\u2620"'    # python2
$ python3 -c 'print(u"\u2620")'  # python3

Kết quả trong:


2

Trong Bash:

UnicodePointToUtf8()
{
    local x="$1"               # ok if '0x2620'
    x=${x/\\u/0x}              # '\u2620' -> '0x2620'
    x=${x/U+/0x}; x=${x/u+/0x} # 'U-2620' -> '0x2620'
    x=$((x)) # from hex to decimal
    local y=$x n=0
    [ $x -ge 0 ] || return 1
    while [ $y -gt 0 ]; do y=$((y>>1)); n=$((n+1)); done
    if [ $n -le 7 ]; then       # 7
        y=$x
    elif [ $n -le 11 ]; then    # 5+6
        y=" $(( ((x>> 6)&0x1F)+0xC0 )) \
            $(( (x&0x3F)+0x80 ))" 
    elif [ $n -le 16 ]; then    # 4+6+6
        y=" $(( ((x>>12)&0x0F)+0xE0 )) \
            $(( ((x>> 6)&0x3F)+0x80 )) \
            $(( (x&0x3F)+0x80 ))"
    else                        # 3+6+6+6
        y=" $(( ((x>>18)&0x07)+0xF0 )) \
            $(( ((x>>12)&0x3F)+0x80 )) \
            $(( ((x>> 6)&0x3F)+0x80 )) \
            $(( (x&0x3F)+0x80 ))"
    fi
    printf -v y '\\x%x' $y
    echo -n -e $y
}

# test
for (( i=0x2500; i<0x2600; i++ )); do
    UnicodePointToUtf8 $i
    [ "$(( i+1 & 0x1f ))" != 0 ] || echo ""
done
x='U+2620'
echo "$x -> $(UnicodePointToUtf8 $x)"

Đầu ra:

─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟
┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿
╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟
╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿
▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟
■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿
◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟
◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿
U+2620 -> 

0

Nếu giá trị hex của ký tự unicode được biết đến

H="2620"
printf "%b" "\u$H"

Nếu giá trị thập phân của một ký tự unicode được biết đến

declare -i U=2*4096+6*256+2*16
printf -vH "%x" $U              # convert to hex
printf "%b" "\u$H"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.