У вас есть две проблемы. Первый заключается в том, что ваша команда sed не делает то, что вы ожидаете. Давайте исправим это в первую очередь. Я предполагаю, что вы хотите написать пользователю жирным шрифтом, а остальные по умолчанию - unbold. Это должно быть лучше:
#!/bin/bash
bold="\e[1m"
unbold="\e[0m"
green="\e[32m"
default="\e[39m"
who | sed "s/^\([[:alpha:]_]\+\)\(.*\)/$bold$green\1$default$unbold\2/"
Или это действительно лучше? вы видите уродливые коды вместо приятных цветов. И это твоя вторая проблема. Это то, как мы будем это исправить:
#!/bin/bash
bold=$'\e[1m'
unbold=$'\e[0m'
green=$'\e[32m'
default=$'\e[39m'
who | sed "s/^\([[:alpha:]_]\+\)\(.*\)/$bold$green\1$default$unbold\2/"
или, если вам не нравится ANSI-C quotings:
#!/bin/bash
bold=$(echo -e "\e[1m")
unbold=$(echo -e "\e[0m")
green=$(echo -e "\e[32m")
default=$(echo -e "\e[39m")
who | sed "s/^\([[:alpha:]_]\+\)\(.*\)/$bold$green\1$default$unbold\2/"
Примечание. Считается очень плохой практикой использовать имена переменных в верхнем регистре в bash. Я знаю, что вы увидите много людей, которые это делают, но это действительно неправильно. Вот почему я опустил все ваши переменные.
Что касается имен переменных: есть ли какая-то особая причина, это плохая практика? Учебное пособие, за которым я следую, похоже, использует прописные буквы для всех, предназначенных для постоянного и нижнего регистра для реальных переменных. – drwhattheheck
@ drwhattheheck Между вчерашним днем и этим утром здесь было два вопроса о том, как скрипт [tag: bash] не работает. Причина заключалась в том, что плакаты (2 разных парня) использовали переменную под названием «PATH» и, следовательно, все испортили. Они бы сэкономили часы, если бы они только уважали это: _use имена переменных нижнего регистра в [tag: bash] _. –