我是Bourne shell的新手,想做简单的阵列模拟.这有效:
COLORS='FF0000 0000FF 00FF00'
i=2
color=$(echo ${COLORS} | awk '{print $2}')
echo "color selected: $color"
Run Code Online (Sandbox Code Playgroud)
我想要做的是在print中传递$i而不是固定$2参数(稍后将在循环中使用).我花了几个小时搞清楚单引号和双引号的正确组合来做到这一点,没有运气.
我得到的最接近的是
color=$("echo ${COLORS} | awk '{print "$"${i}}'")
Run Code Online (Sandbox Code Playgroud)
运行结果是:
+ 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:
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
不要浪费时间尝试让shell在awk命令中正确扩展变量,只需使用-v以下命令定义变量:
echo $COLORS | awk -v col=2 '{ print $col }'
Run Code Online (Sandbox Code Playgroud)
就你的i变量而言,这变为:
i=1
echo $COLORS | awk -v col=$i '{ print $col }'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4279 次 |
| 最近记录: |