Bash:
Преобразование строки в нижний регистр
Как это делать:
Вот простой способ преобразовать строку в нижний регистр в Bash:
str="Make Me Lower Case"
lower_str=$(echo "$str" | tr '[:upper:]' '[:lower:]')
echo $lower_str
Вывод:
make me lower case
В Bash версии 4.0 и выше существует встроенный способ с использованием расширения параметра:
str="Make Me Lower Case"
lower_str="${str,,}"
echo $lower_str
Вывод:
make me lower case
Подробнее
До Bash 4.0 для преобразования строк в нижний регистр часто использовались внешние утилиты, такие как tr
, awk
или sed
. Каждая из них предоставляет различные способы манипуляции со строками, не ограничиваясь только изменением регистра, но может требовать запуска нового процесса, что влияет на производительность.
Введение синтаксиса ${parameter,,pattern}
в Bash 4.0 предоставило встроенную функцию для преобразования строк, которая работает быстрее и не зависит от внешних утилит. Есть альтернативы внутри самого Bash:
awk
:echo $str | awk '{print tolower($0)}'
sed
:echo $str | sed 's/[A-Z]/\L&/g'
tr
:echo $str | tr '[:upper:]' '[:lower:]'
- как показано выше.
С точки зрения реализации, ${parameter,,pattern}
изменяют не только символы ASCII; они осведомлены о UTF-8 и могут обрабатывать неанглийские символы, что делает их универсальными для международных приложений.
Смотрите также
- Расширение параметров Bash: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
- Команда
tr
: https://www.gnu.org/software/coreutils/manual/html_node/tr-invocation.html - Программирование в AWK: https://www.gnu.org/software/gawk/manual/gawk.html
- Редактор потоков
sed
: https://www.gnu.org/software/sed/manual/sed.html