簡體   English   中英

用其他變量的名稱創建變量

[英]create variable with name of other variable

很難找到這個的標題: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.

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

如果您使用bash 4,則可以使用關聯數組:

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

如果您沒有支持關聯數組的shell,那么您將無法使用shell做到這一點。 考慮使用腳本語言。 可以使用awk ,如果其他所有方法都失敗,則它支持關聯數組。 awk使用system功能來執行mysql命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM