变量比较和模式替换

时间:2019-02-27 13:42:09

标签: bash if-statement sed

我正在尝试创建一个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语句尝试了[]或(()),但我找不到解决它的方法。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

计算某种事物的发生次数似乎是一种非常round回的方法。

redux