linux - 将所有脚本中的变量评估方法从 $VAR_NAME 更改为 ${VAR_NAME}

标签 linux bash

我们有几个脚本,我们希望将变量评估方法从 $VAR_NAME 替换为 ${VAR_NAME}
这是必需的,以便脚本具有统一的变量评估方法

我正在考虑使用 sed,我编写了如下示例命令,

echo "\$VAR_NAME" | sed 's/^$[_a-zA-Z0-9]*/${&}/g'

同样的输出是

${$VAR_NAME}

现在我不想在 {} 中使用 $,我该如何删除它?
对于完成此任务有更好的建议吗?

编辑 以下命令有效

echo "\$VAR_NAME" | sed -r 's/\$([_a-zA-Z]+)/${\1}/g'

编辑1
我使用以下命令在脚本文件中进行替换

sed -i -r 's:\$([_a-zA-Z0-9]+):${\1}:g' <ScriptName>

最佳答案

由于 sed 命令的第一部分搜索 $VAR_NAME,因此整个 $VAR_NAME部分将放入 ${} 包装器中。

您可以在正则表达式中使用后视搜索 $ 部分,这样您最终可以使用 /{&}/结束 sed 调用g 因为 $ 将位于匹配表达式的左侧。

http://www.regular-expressions.info/lookaround.html
http://www.perlmonks.org/?node_id=518444

我认为 sed 不支持这种正则表达式,但您可以创建一个以 perl -pe 开头的命令。我相信以下 perl 命令可以满足您的需求。

perl -p -e 's/(?<=\$)[_a-zA-Z0-9]*/{$&}/g'

PCRE Regex to SED

关于linux - 将所有脚本中的变量评估方法从 $VAR_NAME 更改为 ${VAR_NAME},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34148834/

相关文章:

linux - 无关的论据

linux - 检查文件是否是 Freepascal 中的符号链接(symbolic link)

php - 我们可以在 Bash 脚本中使用 PHP 吗?

bash - 除了通常的 stdin/stdout/stderr (0, 1, 2) 之外,我们还能有更多的文件描述符吗?

bash - 如何使用 GNU 并行

linux - 如何使用 perl 脚本创建添加用户到 linux 机器

c - 系统调用表中的common abi有什么用

linux - Java执行linux命令

bash - 管道 heredoc 的多行语法;这是可移植的吗?

Linux Bash 自动命令,源文本文件