使用其他变量的名称创建变量

时间:2014-01-07 16:04:28

标签: linux bash variables loops

很难为此找到标题:D

我有这段代码:

data=( "slots" "npcs" )
for i in "${data[@]}"
do
  "$i"=$(mysql_exec "SELECT $i FROM orders WHERE order_id = $order") # slots returns 5 and npcs returns 1
done

在循环中,我想创建一个名为$i内容的变量。 因此,它应该创建一个名为slots (content: 5)npcs (content: 1)

的变量

我希望你理解我的问题:P

错误:

./install: Line 16: slots=5: command not found.
./install: Line 16: npcs=1: command not found.

2 个答案:

答案 0 :(得分:3)

您可以使用declare命令动态创建变量名称。

data=( "slots" "npcs" )
for i in "${data[@]}"
do
  declare "$i=$(mysql_exec "SELECT $i FROM orders WHERE order_id = $order")" # slots returns 5 and npcs returns 1
done

read命令也可以与过程变电站一起使用

read $i < <(mysql_exec "SELECT $i FROM orders WHERE order_id = $order")

但是,请考虑一种方法是否真的优于简单编写

grab_from_sql () {
   mysql_exec "SELECT $1 FROM orders WHERE order_id = $2"
}
slots=$(grab_from_sql slots $order)
npcs=$(grab_from_sql npcs $order)

答案 1 :(得分:0)

如果你有bash 4,你可以使用关联数组:

data=(slots npcs)
declare -A res
for i in "${data[@]}"; do
  res[i]=$(mysql …)
done

如果你没有支持关联数组的shell,那么使用shell就无法做到这一点。考虑使用脚本语言。您可以使用awk,如果其他所有方法都失败,它会支持关联数组。使用system中的awk函数执行mysql命令。