我的 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"s\n", "[]")}' | sed 's/ /[]/g'
done
我需要在 awk 中使用名为“nO”和“nB”等的变量。我的老师建议在 awk 之前将这些值分配给另一个变量,但是当我这样做时,它只打印“$nO”而不是像“200”这样的值。这个怎么做?我需要这样的东西:awk -v j=$[n$b],所以 j 在第一个循环中被分配了变量 nO 的值,然后是 nB 的值。 (这些 nO 或 mO 已在前面定义。
答案 0 :(得分:1)
当你有nO=200
时,你可以在b=O
中使用u="n$b"
,并得到值
awk -v "j=${!u}" -v "h=$b" 'BEGIN{printf(" "h" stars: %6d ", j)}'
!
将查找它引用的变量。
答案 1 :(得分:0)
您也可以使用“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}'