技术解析
最近在写 bash 脚步进行一些自动化, 新手,中间需要把 Nginx 配置写到 /etc/nginx/sites-aviailable/default 里面。由于配置是带换行和缩进的,我又不想把配置放到另外一个文件,于是就开始摸索如何在 bash 里面表示多行文本。
1. 一开始手动向文本中插入 \n 和 \t, 想着用 echo -e 然后 pipe 就能用了
2. 后来发现手动太麻烦了,配置一多根本没法 scale, 于是开始找能打印出 \n 和 \t 这些不可见字符的方法
3. 没找到,决定自己写,思路是先把文本转为 hex, 把换行的 hex 替换为 "\" 和 “n” 的 hex, 把制表符的 hex 换为 "\" 和 "t" 的 hex,然后把 hex 文本转回为 ASCII 字符。
第 3 步了解到了 hexdump 和 xxd, 这是代码:
# to use hexdump, bsdmainutils must be installed
yes Y | apt install bsdmainutils xxd > /dev/null 2>&1
# newline ascii hex code: 0a
# tab ascii hex code: 09
# backslash ascii hex code: 5c
# n ascii hex code: 6e
# t ascii hex code: 74
hexdump -e '16/1 "%02x " "\n"' $1 | sed 's/0a/5c6e/g' | sed 's/09/5c74/g' | xxd -r -p
后来偶然发现有一种叫 heredoc 的东西,可以在脚本中直接表示格式化文本,当场傻了
请问如何避免绕弯路,能流利自信的写 bash 脚本呢?
此外,我之前了解到 explainshell.com 和 shellcheck 这两个工具,感觉有和没有简直是天上地下。各位如果有这种超好用的工具,也希望能推荐下