bash中的延迟变量扩展

时间:2014-11-14 12:08:11

标签: bash sed echo expansion

我有一个方案,我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

我首先使用sedansi替换为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 <<技巧,但没有一个实验给了我想要的输出。

1 个答案:

答案 0 :(得分:1)

eval "echo \"$( echo "${input}" )\""

但为什么不直接使用sed(这里使用你的变量名和替换内容

cat > | sed "s/\$error/${error}/g;s/\$fatal/${fatal}/g;s#\$defaults#${defaults}#g'