Biểu tượng và nhân vật tuyệt vời trong một dấu nhắc bash


81

Tôi vừa chạy qua một ảnh chụp màn hình của thiết bị đầu cuối của ai đó:

Ảnh chụp màn hình của phiên hiển thị lời nhắc với dấu hoa thị và mũi tên

Có một danh sách tất cả các ký tự có thể được sử dụng trong dấu nhắc Bash hay ai đó có thể đưa tôi ký tự cho ngôi sao và mũi tên phải không?

Câu trả lời:


104

Bạn có thể sử dụng bất kỳ ký tự có thể in, bash không bận tâm. Bạn có thể muốn định cấu hình thiết bị đầu cuối của mình để hỗ trợ Unicode (dưới dạng UTF-8 ).

Có rất nhiều ký tự trong Unicode, vì vậy đây là một vài mẹo để giúp bạn tìm kiếm thông qua các biểu đồ Unicode:

  • Bạn có thể thử vẽ nhân vật trên Shapecatcher . Nó cố gắng nhận ra một ký tự Unicode trong những gì bạn vẽ.
  • Bạn có thể cố gắng tìm ra khối nào của nhân vật. Ví dụ, biểu tượng trông kỳ lạ đó và ngôi sao đó sẽ nằm trong một khối các biểu tượng linh tinh; các ký tự thích Ǫılà các chữ cái Latin có bổ nghĩa; là một biểu tượng toán học, v.v.
  • Bạn có thể thử nghĩ về một từ trong mô tả của nhân vật và tìm từ đó trong một danh sách các tên và mô tả biểu tượng unicode. Gucharmap hoặc Kcharselect có thể giúp đỡ.

PS On Shapecatcher, tôi đã U + 2234 DO ĐÓ cho , U + 2192 sang phải ARROW Trang cho , U + 263F MERCURY cho U + 2605 BLACK STAR cho .

Trong tập lệnh bash, lên đến bash 4.1, bạn có thể viết một byte theo điểm mã của nó, nhưng không phải là ký tự. Nếu bạn muốn tránh các ký tự không phải ASCII để .bashrcthay đổi mã hóa tệp, bạn cần nhập các byte tương ứng với các ký tự này trong mã hóa UTF-8. Bạn có thể thấy các giá trị thập lục phân bằng cách chạy echo ∴ → ☿ ★ | hexdump -Ctrong thiết bị đầu cuối UTF-8, ví dụ được mã hóa bằng \xe2\x88\xb4trong UTF-8.

if [[ $LC_CTYPE =~ '\.[Uu][Tt][Ff]-?8' ]]; then
  PS1=$'\\[\e[31m\\]\xe2\x88\xb4\\[\e[0m\\]\n\xe2\x86\x92 \xe2\x98\xbf \\~ \\[\e[31m\\]\xe2\x98\x85 $? \\[\e[0m\\]'
fi

Kể từ bash 4.2, bạn có thể sử dụng \utheo sau 4 chữ số thập lục phân trong một $'…'chuỗi.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'

Hừm. Khi tôi chạy echo ★ | hexdump -C1, tôi nhận được : hexdump: invalid option -- '1'. Nó sẽ vẫn hoạt động mà không có 1 trong lời mời?
Naftuli Kay

2
@TKKocheran Đó 1là một lỗi đánh máy, nó chỉ hexdump -C(hoặc hdviết tắt của một số hệ thống).
Gilles

Ngoài ra, bạn có thể làm: PS1=$'\u2234\u2192\u263f\u2605'cảm thấy dễ dàng hơn để duy trì :-)
mat

1
Shapecatcher là tuyệt vời! cảm ơn vì đã chỉ ra
Siamore

1
@FaithReaper \uNNNNCú pháp là một tính năng của $'…'trích dẫn, không phải là mở rộng nhanh chóng. Giá trị PS1phải chứa ký tự Unicode. $'\u1234'là một cách để đặt ký tự Unicode thành một chuỗi.
Gilles

12

Bạn có thể tìm thấy các biểu tượng unicode trên nhiều trang web, như trang này: http://panmental.de/symbols/info.htmlm

Bạn chỉ cần đảm bảo rằng thuật ngữ của bạn hỗ trợ UTF-8 .


Làm thế nào tôi có thể thoát khỏi một trong những nhân vật này? Tức là\u27A4
Naftuli Kay

2
Xem câu trả lời @Gilles, hoặc điều này: stackoverflow.com/questions/602912/ trên
jasonwryan

Bạn có thể thấy tất cả hơn 65000 điểm unicode tại utf8-chartable.de (Trong ngữ cảnh của các giá trị điểm mã "utf8" đồng nghĩa với "unicode".)
goldilocks 20/03/13

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.