bash - 变量比较和模式替换
问题描述
我正在尝试创建一个 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 语句尝试了 [] 或 (()) ,但我找不到修复它的方法。
解决方案
此处只需要一个参数扩展,如果扩展为空,则$a
用 with替换扩展。\hspace{2cm}
sed -i -e "s/#b/${a:-\\\\hspace{2cm}}/g" source.tex
您需要一堆,\
因为涉及两轮转义。首先,shell 本身将每个\\
反斜杠简化为单个文字反斜杠。然后sed
还将每对减少\\
为单个文字反斜杠。
推荐阅读
- android - 如何防止我的 Android 应用在后台停止?
- flutter - Flutter:必须向 Text 小部件提供非空字符串
- python - 如何在 Python 3.7 中同时运行 Plotly 和 Cufflinks?
- python - PyQt5有没有像Kivy一样的过渡效果
- kubernetes - 在 GKE 上使用 Dask Kubernetes 的工作器超时
- azure-ad-b2c - AzureB2C 自定义策略:无效请求提供的 id_token_hint 参数不包含接受的颁发者
- selenium - 当我运行 Protractor 无头测试 (Chrome) 时,如何处理辅助浏览器选项卡中的页面加载?
- python - 在python中组合几种结构类型
- python - 如何使用 functools.singledispatch 在类外创建类方法?
- python-3.x - Python中的Keyerror。我是一个初学者,并试图让这个登录系统接受用户输入并将其以字典的形式写入文本文件