【发布时间】:2019-07-18 01:32:35
【问题描述】:
我在替换 bash 中的字符串中的变量时遇到问题。比如我想替换
"test$FOO1=$FOO2" $BAR
与:
"test" .. FOO1 .. "=" .. FOO2 .. "" $BAR
我试过了:
sed 's/\$\([A-Z0-9_]\+\)\b/" .. \1 .. "/g'
但我不想在双引号字符串之外以相同的方式替换变量,例如喜欢:
if [ $VARIABLE = 1 ]; then
只需要替换
if VARIABLE then
有没有办法只替换 inside 的双引号?
背景:
我要convert a bash script into Lua script。
我知道,以这种方式转换所有可能的 shell 脚本并不容易,但我想要实现的是用 Lua 命令替换所有基本语言结构并替换所有变量和条件。手动将 bash 转换为 Lua 时,此处的自动化将节省大量工作
【问题讨论】:
-
[ $VARIABLE = 1 ]无论如何都是一个错误;它应该是[ "$VARIABLE" = 1 ]。您不能只看引用的内容和未引用的内容。有效地在两种语言之间进行翻译意味着解析源代码以构建抽象语法树,然后使用该树生成目标语言的代码。 -
例如,你会用
if [ "$FOO -- $BAR" = "hello -- there -- world" ];这样的东西做什么? -
当然不会很完美,但是通过正确的bash源码准备,在自动翻译到Lua方面可以实现很多,省去很多人工
-
[ $VARIABLE = 1 ]并不总是需要引号:取决于 VARIABLE 的来源 -
也许这个项目会对你的总体目标有帮助,而不是这个具体问题:github.com/3scale/apicast-cli/issues/1