У меня есть сценарий, где я echo
несколько строк и pipe
их переводчик, как это:Задержка расширения переменного в Баше
echo -n '
$error This is an error$defaults
$fatal THIS IS FATAL ERROR$defaults
This is normal text
' | translate ansi
echo -n '
$error This is an error$defaults
$fatal THIS IS FATAL ERROR$defaults
This is normal text
' | translate html
я впервые использовал sed
заменить ansi
с html
кодами, но из-за очевидные Я хотел бы сделать что-то вроде этого:
input="$(cat)"
if [ "$1" == ansi ]
then
error="[1m[31m"
fatal="[0m[30m[41m"
defaults="[0m"
elif [ "$1" == html ]
then
error='<span class="error">'
fatal='<span class="fatal">'
defaults='</span>'
fi
eval "echo "$input""
Но выход находится в одной строке. Я экспериментировал с ${}
и cat <<
трюками, но ни один из экспериментов дал мне желаемый результат.
Почему вы используете 'eval'? –
подсветка синтаксиса должен показать вам проблему на' eval' line – choroba
@ Etan Reisner - так как 'echo' и' HEREDOC' потерпели неудачу, я пробовал это, и он почти сработал. @choroba - Я знаю, что использование таких котировок неверно, но все остальные комбинации одиночных или/или двойные кавычки дают мне ошибку 'строка 15: $ '\ E [1m \ E [31m': команда не найдена – Ulrik