Bash 变量比较与模式替换
我试图创建一个bash脚本,它使用sed命令将模式替换为包含字符串的变量,或者在变量中没有任何内容时放置空格。我找不到好的方法来写它并使它工作。以下是我遇到的问题:Bash 变量比较与模式替换,bash,if-statement,sed,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 运行此操作时,条件始终为false。
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
运行此操作时,条件始终为false。我尝试了[]或(())来获取if语句,但我就是找不到修复它的方法 无论如何,计算某件事的发生次数似乎是一种非常迂回的方法
case $a in
*[A-Za-z0-9_]*) x='\\hspace{2cm}';;
*) x=$a;;
esac
sed -i "s/#b/$x/g" source.tex
这里只需要一个参数展开,如果展开为空,则将
$a
的展开替换为\hspace{2cm}
sed -i -e "s/#b/${a:-\\\\hspace{2cm}}/g" source.tex
您需要一堆
\
,因为其中涉及两轮转义。首先,shell本身将每个\\
减少为一个文本反斜杠。然后sed
还将每对\
减少为一个文字反斜杠。用if[“$a_flag”-eq“0”]替换if语句的可能重复项@WiktorStribiżew我尝试了公认答案的两种解决方案,但仍然不起作用。我尝试了((a#u flag=0))和[“$a#u flag”-eq“0”]sed-I-e“s/#b/${a:-\\\\hspace{2cm}/g”source.tex
.Done.我们在这里有点茫然,因为不清楚$a
到底包含什么。我想它永远不会像@chepner假设的那样完全是空的。我尝试了这个,这次它打印了\hspace,但没有打印a:case$a in*[a-Za-z0-9.]*)sed-I-e的s/#b/\\hspace{2cm}中的内容/g'source.tex;;*)sed-i-e“s/#b/$a/g”source.tex;;esac