我有兩個 bash 陣列,我想將陣列字串附加到名稱陣列元素的末尾。
array=(a b c)
name=(toto_ tata_)
結果 :
toto_a
toto_b
toto_c
tata_a
tata_b
tata_c
我試過這些命令:
for i in "${name[@]}"
do
arra=( "${i/%/$array[@]}" )
done
printf '%s\n' "${arra[@]}"
uj5u.com熱心網友回復:
使用Brace Expansion作為交叉產品進行擴展
readarray -t new_array < <(IFS=,; eval "printf '%s\n' {${name[*]}}{${array[*]}}")
# ....................................................^..........^^...........^
然后
$ declare -p new_array
declare -a new_array=([0]="toto_a" [1]="toto_b" [2]="toto_c" [3]="tata_a" [4]="tata_b" [5]="tata_c")
Eval 是允許變數擴展首先發生,然后執行大括號擴展所必需的。
uj5u.com熱心網友回復:
我建議使用第二個for:
array=(a b c)
name=(toto_ tata_)
arra=()
for i in "${name[@]}"; do
for j in "${array[@]}"; do
arra =("$i$j")
done
done
printf '%s\n' "${arra[@]}"
將產生:
toto_a
toto_b
toto_c
tata_a
tata_b
tata_c
在線試試吧!
uj5u.com熱心網友回復:
第二個for可以通過引數擴展來避免
for nam in "${name[@]}";do printf "${nam/%/%s\\n}" "${array[@]}";done
將產生:
toto_a
toto_b
toto_c
tata_a
tata_b
tata_c
為了好玩,一些變體(沒有任何 for回圈):
printf -v fmt "${name[*]/%/%%s\\n}"
printf "${fmt// }" ${array[@]}
toto_a
tata_b
toto_c
tata_
或者
printf -v fmt "${name[*]/%/%%s\\n}";printf "${fmt// }" ${array[@]}{,}
toto_a
tata_b
toto_c
tata_a
toto_b
tata_c
然后不經for,但具有叉到sort
printf -v fmt "${name[*]/%/%%s\\n}";printf "${fmt// }" ${array[@]}{,} |
sort -k 1r,1.5
toto_a
toto_b
toto_c
tata_a
tata_b
tata_c
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/372720.html
