【发布时间】:2021-02-18 11:51:21
【问题描述】:
一个 awk 命令创建了一个我想返回给 bash 的数组。
GIT=($(history | grep -c git | awk '{ TMP[4]=$1 } END { print TMP }'))
并收到错误attempt to use array TMP in a scalar context。
所以我尝试在 awk 中使用已经存在的数组
GIT=()
history | grep -c git | awk 'END { GIT[4]=$1 }'
echo "${GIT[@]}" # empty result
但结果GIT 数组为空。
我提出的例子没有多大意义,例如。为什么索引中有 4 个?这只是一个例子。我需要使用由 awk 创建的数组/映射,其中键是整数。而且我需要这些原始索引,因为并非所有键都是按顺序排列的。我有 1,2,4,7,8 等等。
【问题讨论】:
-
如果您提供一些示例输入和预期输出会有所帮助;同时,对于
awk问题...您的意思是使用字段#4 作为TMP数组的索引,例如TMP[$4]=$1?另外,假设TMP是 一个数组,您需要修改awk/print以循环遍历数组的元素;至于空的GIT数组...GIT[]数组insideawk代码仅在awk代码中可用(即,调用/父进程) -
awk 不是 bash。您不会期望在 C 程序中创建一个数组并且以某种方式让 bash 可以访问该数组,同样您应该对 awk 有相同的期望。 awk 和 bash 是两个完全不同的工具,它们有自己的语言、语法、语义和范围。现在您已经发布了XY Question - 如果您对其进行编辑以向我们展示您正在尝试 DO 而不是 HOW 您正在尝试这样做,那么我们可以帮助您以正确的方式做任何您想做的事情,而不是潜在地帮助您实施错误的方式
-
格伦杰克曼知道我想要做什么。 :D