74

I just ran across a screenshot of someone's terminal:

Screenshot of a session showing a prompt with an asterisk and arrow

Is there a list of all of the characters which can be used in a Bash prompt, or can someone get me the character for the star and the right arrow?

95

You can use any printable character, bash doesn't mind. You'll probably want to configure your terminal to support Unicode (in the form of UTF-8).

There are a lot of characters in Unicode, so here are a few tips to help you search through the Unicode charts:

  • You can try to draw the character on Shapecatcher. It tries to recognize a Unicode character in what you draw.
  • You can try to figure out which block the character is in. For example, that weird-looking symbol and that star would be in a block of miscellaneous symbols; characters like Ǫ and ı are latin letters with modifiers; is a mathematical symbol, and so on.
  • You can try to think of a word in the description of the character and look for it in a list of unicode symbol names and descriptions. Gucharmap or Kcharselect can help.

P.S. On Shapecatcher, I got U+2234 THEREFORE for , U+2192 RIGHTWARDS ARROW for , U+263F MERCURY for and U+2605 BLACK STAR for .

In a bash script, up to bash 4.1, you can write a byte by its code point, but not a character. If you want to avoid non-ASCII characters to make your .bashrc resilient to file encoding changes, you'll need to enter the bytes corresponding to these characters in the UTF-8 encoding. You can see the hexidecimal values by running echo ∴ → ☿ ★ | hexdump -C in a UTF-8 terminal, e.g. is encoded by \xe2\x88\xb4 in 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

Since bash 4.2, you can use \u followed by 4 hexadecimal digits in a $'…' string.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'
  • Hmm. When I run echo ★ | hexdump -C1, I get: hexdump: invalid option -- '1'. Will it still work without the 1 in the invocation? – Naftuli Kay Dec 2 '11 at 1:47
  • 2
    @TKKocheran That 1 was a typo, it's just hexdump -C (or hd for short on some systems). – Gilles Dec 2 '11 at 10:46
  • Also, you could do : PS1=$'\u2234\u2192\u263f\u2605' feels easier to maintain :-) – mat Mar 20 '13 at 11:14
  • 1
    Shapecatcher is awesome! thanks for pointing it out – Siamore Jan 16 '17 at 9:28
  • 1
    @FaithReaper The \uNNNN syntax is a feature of $'…' quoting, not of prompt expansion. The value of PS1 must contain the Unicode character. $'\u1234' is a way to put the Unicode character into a string. – Gilles Feb 15 '18 at 17:37
12

You can find the unicode symbols on lots of sites, like this one: http://panmental.de/symbols/info.htm

You just have to make sure that your term supports UTF-8.

4

i like using these tools — they have a nice experience, and it's easy to search through:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.