我的bash脚本有问题。
for b in O B A F G K M
do
u='$n'$b
w='$m'$b
awk -v "j=$u" -v "h=$b" 'BEGIN{printf(" "h" stars: %6d ", j)}'
awk -v "i=$w" 'BEGIN{printf("%"i"sn", "[]")}' | sed 's/ /[]/g'
done
我需要使用称为";nO";那么";nB";等等。我的老师建议在awk之前将这些值分配给另一个变量,但当我这样做时,它只会打印"$nO";而不是像";200〃;。如何做到这一点?我需要这样的东西:awk-v j=$[n$b],所以在第一个循环中,j被赋予变量nO的值,然后是nB的值。(这些nO或mO已在前面定义。
当您有nO=200
时,您可以在u="n$b"
中使用b=O
,并获得值
awk -v "j=${!u}" -v "h=$b" 'BEGIN{printf(" "h" stars: %6d ", j)}'
!
将查找它引用的变量。
您也可以使用;nameref";(在bash 4.3中介绍(
nB=Hello mB=World
letter=B
declare -n u="n$letter" w="m$letter"
awk -v j="$u" -v h="$w" 'BEGIN {print "j is " j; print "h is " h}'
j is Hello
h is World
或者,重新构造shell脚本以使用关联数组(bash 4.0(:
declare -A n m
n[B]=foo
m[B]=bar
letter=B
awk -v j="${n[$letter]}" -v h="${m[$letter]}" 'BEGIN {print "j is " j; print "h is " h}'