将变量从 awk 传递到 bash

将变量从 awk 传递到 bash

如何将变量从 awk 传递到 bash?我想传递很多变量,所以我不使用:

x=$(awk '.....)

我认为它没什么用。

答案1

假设您信任 awk 正在处理的传入数据。

您可以让 awk 打印出 shell 变量声明,并且sourceawk 的输出就像是一个 shell 文件:

source <(
    awk '
        # ....
        print "var1=" value1
        print "var2=" value2
        # ....
    ' input
)
echo "shell var1 = $var1"
echo "shell var2 = $var2"

答案2

这是一个普遍问题,在 StackExchange 上已经多次出现过,例如

答案始终是,一个进程不可能改变其父进程的环境(而这正是当您要求在awk生成它的 shell 中设置环境变量时试图实现的)。

通常建议的解决方案是获取输出,正如 Glenn 所展示的那样。不过,你必须信任该程序。你基本上是在执行任意代码。

另一个略有不同的解决方案是将var=value行输出到命名文件,然后改为执行该文件的 source 命令。(执行 source 命令基本上是在当前 shell 中执行文件的内容,就像您输入它们一样;请参阅http://ss64.com/bash/source.html) 这种方法的优点是您可以在获取文件之前检查其内容。

相关内容