我面臨一個將值分配給其名稱存盤在其他變數或檔案中的變數的問題
貓 ids.txt
ID1
ID2
ID3
我想做的是:
for i in `cat ids.txt'; do $i=`cat /proc/sys/kernel/random/uuid`
或者
for i in ID1 ID2 ID3; do $i=`cat /proc/sys/kernel/random/uuid`
但它不起作用。我想要什么,它是這樣的:
echo $ID1
5dcteeee-6abb-4agg-86bb-948593020451
echo $ID2
5dcteeee-6abb-4agg-46db-948593322990
echo $ID3
5dcteeee-6abb-4agg-86cb-948593abcd45
uj5u.com熱心網友回復:
使用宣告。https://linuxcommand.org/lc3_man_pages/declareh.html
# declare values
for i in ID1 ID2 ID3; do
declare ${i}=$(cat /proc/sys/kernel/random/uuid)
done
# read values (note the `!` in the variable to simulate "$ID1", not ID1)
for i in ID1 ID2 ID3; do echo ${!i}; done
3f204128-bac6-481e-abd3-37bb6cb522da
ccddd0fb-1b6c-492e-bda3-f976ca62d946
ff5e04b9-2e51-4dac-be41-4c56cfbce22e
或者更好...從檔案中讀取 ID:
for i in $(cat ids.txt); do
echo "ID from file: ${i}"
declare ${i}=$(cat /proc/sys/kernel/random/uuid)
echo "${i}=${!i}"
done
結果:
$ cat ids.txt
ID1
ID2
ID3
$ for i in $(cat ids.txt); do echo "ID from file: ${i}"; declare ${i}=$(cat /proc/sys/kernel/random/uuid); echo "${i}=${!i}"; done
ID from file: ID1
ID1=d5c4a002-9039-498b-930f-0aab488eb6da
ID from file: ID2
ID2=a77f6c01-7170-4f4f-a924-1069e48e93db
ID from file: ID3
ID3=bafe8bb2-98e6-40fa-9fb2-0bcfd4b69fad
uj5u.com熱心網友回復:
使用.內置、行程和命令替換以及printf' 隱式回圈的單線:
. <(printf '%s=$(cat /proc/sys/kernel/random/uuid)\n' $(<ids.txt))
echo "ID1=$ID1"; echo "ID2=$ID2"; echo "ID3=$ID3"
注意: 的行ids.txt必須僅包含有效的變數名,并且檔案必須來自受信任的來源。在呼叫此命令之前檢查該檔案grep -vq '^[[:alpha:]][[:alnum:]]*$' ids.txt可能是一種更安全的方法。
uj5u.com熱心網友回復:
關聯陣列的方法:
#!/usr/bin/env bash
# Declares associative array to store ids and UUIDs
declare -A id_map=()
# Reads ids.txt into array
mapfile -t ids < ids.txt
# Iterates ids
for id in "${ids[@]}"; do
# Populates id_map with uuid for each id
# Prepends $id with an x because associative array keys must not be empty
read -r id_map["x$id"] < /proc/sys/kernel/random/uuid
done
# Debug content of id_map
for x_id in "${!id_map[@]}"; do
id="${x_id#?}" # Trims leading x filler
printf '%s=%s\n' "$id" "${id_map[$x_id]}"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/528122.html
標籤:重击循环
上一篇:Bash從命令輸出中獲取模式版本
