Ха! Не ждали? Ща будет кринж, но кринж просветит тех, кто глубоко копается в жопах линукса. Ну а если решил провести выходной на изи, оно нахуй тебе не всралось. Короче… У кодировки ASCII есть особенность:

a -> 01*1*00001  A -> 01*0*00001
b -> 01*1*00010  B -> 01*0*00010
c -> 01*1*00011  C -> 01*0*00011
d -> 01*1*00100  D -> 01*0*00100
e -> 01*1*00101  E -> 01*0*00101
f -> 01*1*00110  F -> 01*0*00110
g -> 01*1*00111  G -> 01*0*00111
h -> 01*1*01000  H -> 01*0*01000
i -> 01*1*01001  I -> 01*0*01001
j -> 01*1*01010  J -> 01*0*01010
k -> 01*1*01011  K -> 01*0*01011
l -> 01*1*01100  L -> 01*0*01100
m -> 01*1*01101  M -> 01*0*01101
n -> 01*1*01110  N -> 01*0*01110
o -> 01*1*01111  O -> 01*0*01111
p -> 01*1*10000  P -> 01*0*10000
q -> 01*1*10001  Q -> 01*0*10001
r -> 01*1*10010  R -> 01*0*10010
s -> 01*1*10011  S -> 01*0*10011
t -> 01*1*10100  T -> 01*0*10100
u -> 01*1*10101  U -> 01*0*10101
v -> 01*1*10110  V -> 01*0*10110
w -> 01*1*10111  W -> 01*0*10111
x -> 01*1*11000  X -> 01*0*11000
y -> 01*1*11001  Y -> 01*0*11001
z -> 01*1*11010  Z -> 01*0*11010
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Строчные и заглавные отличаются только шестым битом. Ну и для изменения регистра достаточно поменять этот бит.

Давай установим его, например в 0 или 1:

printf '%b %b\n' $( printf '\\%03o \\%03o' 65 $((65 ^ 32)) )
printf '%b %b\n' $( printf '\\%03o \\%03o' 97 $((97 ^ 32)) )

printf '%s\n' $((65 ^ 32))
printf '%s\n' $((97 ^ 32))

Нихуясе? Да!

Позырить таблицу ascii: man ascii

А для изменения регистра в баше есть удобные конструкции:

( a='abc'; echo "${a^}" )
( a='ABC'; echo "${a,}" )
( a='abc'; echo "${a^^}" )
( a='ABC'; echo "${a,,}" )

Эти команды в скобках запускаются в подоболочке, чтобы не гадить в текущее окружение самой оболочки. Но ты это и так прекрасно знаешь

Да будет так!