我正在尝试创建一个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语句尝试了[]或(()),但我找不到解决它的方法。
答案 0 :(得分:1)
此处,您只需要一个参数扩展名即可,如果扩展名为空,则用$a
替换\hspace{2cm}
的扩展名。
sed -i -e "s/#b/${a:-\\\\hspace{2cm}}/g" source.tex
您需要一堆\
,因为涉及两轮转义。首先,shell本身将每个\\
减少为单个文字反斜杠。然后sed
还将每对\\
减少为单个文字反斜杠。
答案 1 :(得分:0)
计算某种事物的发生次数似乎是一种非常round回的方法。
redux