很难为此找到标题: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.
答案 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
命令。