首页 > 解决方案 > 变量比较和模式替换

问题描述

我正在尝试创建一个 bash 脚本,该脚本使用 sed 命令将模式替换为包含字符串的变量,或者如果变量中没有任何内容,则放置一个空格。我找不到编写它并使其工作的好方法。这是我遇到问题的部分:

a_flag=$(echo $a | wc -w)

if  [[ $a_flag = 0 ]]; then
    sed -i -e 's/#b/\\hspace{2cm}/g' source.tex
else
    sed -i -e "s/#b/$a/g" source.tex
fi

运行它时,条件始终为假。我为 if 语句尝试了 [] 或 (()) ,但我找不到修复它的方法。

标签: bashif-statementsed

解决方案


此处只需要一个参数扩展,如果扩展为空,则$a用 with替换扩展。\hspace{2cm}

sed -i -e "s/#b/${a:-\\\\hspace{2cm}}/g" source.tex

您需要一堆,\因为涉及两轮转义。首先,shell 本身将每个\\反斜杠简化为单个文字反斜杠。然后sed 还将每对减少\\为单个文字反斜杠。


推荐阅读