2011-11-30 49 views
5

Tôi tự hỏi làm cách nào để tạo ký tự Celsius trong tập lệnh bash của mình, vì vậy tôi có thể sửa đầu ra trong dòng "CPU temp: 50 C"? Trình tự thoát cho loại ký tự đặc biệt này, cung cấp phông chữ của tôi hỗ trợ chúng là gì?Làm cách nào để tạo các ký tự đặc biệt trong tập lệnh Bash cho conky?

Tuy nhiên gãi đầu của tôi ...

Để được chính xác hơn tôi cần nó để sử dụng trong conky tôi sử dụng dòng này: awk '{printf ($ 3" C ")}'. Làm thế nào tôi nên sửa nó để nó ra độ Celsius? Nguyên nhân nếu tôi chèn trực tiếp ký tự ℃, hãy vít ốc vít.

Trả lời

8

Tất cả các chuỗi không kiểm soát byte tập lệnh của bạn xuất ra thiết bị đầu cuối được diễn giải để hiển thị theo cài đặt của thiết bị đầu cuối. Nếu bạn định cấu hình để diễn giải dữ liệu đến là utf-8 thì tất cả những gì bạn cần làm trong tập lệnh bash của bạn là xuất ký tự Celsius theo yêu cầu của utf-8.

Đặt quyền thiết bị đầu cuối của bạn tùy thuộc vào ứng dụng bạn đang sử dụng. Có khả năng nó đã ở chế độ utf-8.

Để hiển thị ký tự bạn muốn, bạn cần tra cứu bảng mã Unicode và mã hóa nó trong utf-8 hoặc bạn có thể tìm nó ở đâu đó khi chuỗi utf-8 của ký tự đã được hiển thị. Nhân vật Celsius được mô tả là here chẳng hạn.

C utf-8 chuỗi là 0xE2 0x84 0x83, vì vậy bạn có thể hiển thị nó trong vỏ của bạn bằng cách sử dụng $'string' xây dựng vì nó chấp nhận \xhh thoát:

$ echo $'\xe2\x84\x83' 
℃ 

hoặc tiếng vang với -e:

$ echo -e '\xe2\x84\x83' 
℃ 

Ngoài ra, bạn có thể gán nó vào một biến

$ CEL=$'\xe2\x84\x83' 
$ echo $CEL 
℃ 

Nếu bạn muốn hiển thị ℃ như hai nhân vật riêng biệt: nhân vật độ và chữ C sau đó bạn có thể sử dụng this character và lệnh này:

$ echo $'\xc2\xb0'C 
°C 

Nếu bạn đang sử dụng một lớp vỏ mà không hỗ trợ các $'string' xây dựng, bạn cũng có thể sử dụng các tiện ích như perl hoặc python:

$ python -c 'print "\xe2\x84\x83"' 
℃ 
$ perl -e 'print "\xe2\x84\x83\n"' 
℃ 

Trong GNU awk bạn có thể sử dụng ngôn ngữ C chuẩn thoát bao gồm \xhh, ví dụ:

$ awk 'BEGIN { print "\xe2\x84\x83"; }' 
℃ 
$ awk 'BEGIN { print "\xc2\xb0\C"; }' 
°C 

Lưu ý rằng cần thêm dấu gạch chéo ngược để chấm dứt số thập lục phân (không có chuỗi thoát) tiêu thụ tất cả các chữ số thập lục phân bao gồm chữ C, xem GNU awk user's guide).

Giải pháp di động khác trong awk là sử dụng chuỗi bát phân.Kể từ thập lục phân 0xC2 là bát phân 302 và hệ thập lục phân 0xB0 là bát phân 260, bạn có thể làm như sau:

$ awk 'BEGIN { print "\302\260C"; }' 
°C 

Tương tự,

$ awk 'BEGIN { print "\342\204\203"; }' 
℃ 
+0

cảm ơn bạn đã giúp đỡ của bạn – mountpeaks

+0

Tôi không thể tìm thấy bất kỳ tham chiếu đến '$ 'string'' xây dựng; tên chính xác của nó là gì, hoặc nó được ghi chép ở đâu? – davide

+0

'man bash' và sau đó tìm kiếm' $ '' –

0

Có không phải là một dãy thoát cho ° như xa như tôi ý thức.

Các vấn đề liên quan