【问题标题】:create variable with name of other variable使用其他变量的名称创建变量
【发布时间】:2014-01-07 16:04:28
【问题描述】:

很难找到这个的标题: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.

【问题讨论】:

    标签: linux bash variables loops


    【解决方案1】:

    您可以使用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)
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 2013-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多