96

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?

0

3 Answers 3

120

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\\]'
6
  • Also, you could do : PS1=$'\u2234\u2192\u263f\u2605' feels easier to maintain :-)
    – mat
    Mar 20, 2013 at 11:14
  • @mat Indeed, thanks (but only since bash 4.2). Mar 20, 2013 at 11:40
  • Bach get the calculation for char width wrong for multi byte characters. There is, I think, a way to fix this, but I can not remember. Jan 19, 2017 at 17:34
  • I have bash --version GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu), and locale shows LC_CTYPE="en_US.UTF-8", but when I want to print \uxxxx in PS1 string, I got username as output and the unicode character is not recognized...
    – WesternGun
    Feb 15, 2018 at 15:09
  • 2
    @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. Feb 15, 2018 at 17:37
15

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.

3
4

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .