gpt4 book ai didi

awk - 如何在 Bourne shell 中将 shell 变量传递给 awk?

转载 作者:行者123 更新时间:2023-12-04 02:03:16 25 4
gpt4 key购买 nike

我是 Bourne shell 的新手,想做简单的数组模拟。这有效:

COLORS='FF0000 0000FF 00FF00'
i=2
color=$(echo ${COLORS} | awk '{print $2}')
echo "color selected: $color"

我想做的是在打印中传递 $i 而不是固定的 $2 参数(稍后将在循环中使用)。我花了几个小时找出单引号和双引号的正确组合来做到这一点,但运气不佳。

我得到的最接近的是

color=$("echo ${COLORS} | awk '{print "$"${i}}'")

运行结果为:

+ COLORS=FF0000 0000FF 00FF00
+ i=2
+ echo FF0000 0000FF 00FF00 | awk '{print $2}'
./tempgraph.sh: ./tempgraph.sh: 37: echo FF0000 0000FF 00FF00 | awk '{print $2}': not found
+ color=
+ echo color selected:
color selected:

感谢任何帮助。

最佳答案

不要浪费时间让 shell 在 awk 命令中正确扩展变量,只需使用 -v 定义一个变量:

echo $COLORS | awk -v col=2 '{ print $col }'

根据您的 i 变量,这变成:

i=1
echo $COLORS | awk -v col=$i '{ print $col }'

关于awk - 如何在 Bourne shell 中将 shell 变量传递给 awk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com