Yauhen Mardan
Yauhen Mardan

Reputation: 417

Shift between two characters

How to get a shift between two characters in bash?

For instance, in C++ we have:

'c'-'a'=2

Are there any elegant solutions?

Upvotes: 0

Views: 49

Answers (1)

Tom Fenech
Tom Fenech

Reputation: 74675

Define ord to get the ASCII value of each character (from Unix & Linux Stack Exchange, Bash FAQ):

ord() { LC_CTYPE=C printf '%d' "'$1"; }

(note that the ' is not a typo! It is required for printf to treat a character as a number1)

Then you can subtract one from the other:

$ echo "$(( "$(ord c)" - "$(ord a)" ))"
2

If you wanted to put this in a function, you could:

diff_ord() { echo "$(( "$(ord $1)" - "$(ord $2)" ))"; }

Then call it like:

$ diff_ord c a
2

  1. If the leading character is a single-quote or double-quote, the value shall be the numeric value in the underlying codeset of the character following the single-quote or double-quote.

Upvotes: 2

Related Questions