Я использую диф форматировать строку, которая включает в себя tput цветовых переменных, и я не в состоянии иметь эти переменные оценено без использования «зла» eval
команды.Оценка цвета отформатированного вывода команды
Команда, которая создает строку:
output1="$(diff --changed-group-format="\${RED}%=\${CLS}" <(echo -e "${nstr1}") <(echo -e "${nstr2}")|tr -d '\n')"
и выводит:
[String n${RED}â${CLS}m${RED}è™${CLS}]
Я смотрел и искал другие ответы, но ничего не работает, кроме:
eval echo "${output1}"
Из того, что я прочитал, мои 3 варианта: eval
(bad), косвенное расширение (лучше), и массивы (best). Каждая попытка косвенного провала не удалась. Я хотел бы использовать параметр массива, но я просто не вижу, как он будет применяться здесь. Я что-то упускаю?
Я не думаю, что это релевантно, но переменные и строение строк, отправленных на diff, находятся в другом вопросе here.
Я не понимаю, почему это работает, но это так! Разве полученная строка не идентична? Если это вопрос прохождения движений, я мог бы использовать более короткий заполнитель правильно? Кроме того, у меня уже есть эти переменные во всем мире, поэтому я не должен был объявлять их локальными здесь правильно? (RED, CYA и т. Д.) Наконец, отличный совет по cls, который получил прямо у меня. – akovia
@akovia: Посмотрите, объясняет ли это обновление. Да, вы могли бы использовать более короткие заполнители.Если вы используете глобальные переменные, вам не нужно объявлять их внутри функции, но для лучшей инкапсуляции вы можете это сделать. – mklement0
Спасибо за расширение объяснения. Это работает красиво! – akovia