我还在学习Unix,而且我在理解以下代码行时遇到了问题。
echo "$lines" | awk '{split($0,a,":"); print a[3],a[2],a[1]}'
我不明白上面代码中的数组a发生了什么。它是在声明数组并将其设置为等于它解析的字符串吗?如果它正在声明数组a,那么为什么我不能在代码中打印出结果呢?
echo "${a[1]}"
上面的行打印一个空行,而不是在解析字符串时存储在数组a中的内容。我知道字符串中总有一些东西需要解析,当我调用数组时[1]我知道我在范围内。我只是没有看到/理解数组中发生的事情,这使我无法在代码中将其打印出来。
答案 0 :(得分:1)
您的代码正在为每行输入打印一行。如果你没有得到输出,我的第一个猜测是,你没有输入。
给出输入:
lines="ab:cd:ef
ij:kl:m"
输出是:
ef cd ab
m kl ij
awk
正在为每行输入执行命令(这是单引号之间的所有内容)。首先将每个$0
的输入行:
拆分为数组a
,然后以相反的顺序打印前三个元素。
如果你试图访问shell中的数组元素,echo
建议什么,那么你来不及了。该数组存在于awk中,并在awk完成时消失。