Shell

在每個列表項中列出兩個值

  • April 20, 2019

我想儲存一個包含姓名和電子郵件地址的列表,並在單個 for 循環中使用它。我想在殼牌中做到這一點。

知道 shell 列表有一個空格分隔符

list = "john, john@gmail.com" "doe, doe@outlook.com" "jenny, jenny@another.domain"

for i,j in $list; do
   echo "Dear $i, email text" | mail -s "Hello $i" $j
done

這應該作為

echo "Dear john, email text" | mail -s "Hello john" john@gmail.com

另外,如果我想在單獨的 csv 文件中創建此列表,我將如何使用它?例如

name, email
john, john@gmail.com
jenny, jenny@another.domain
doe, doe@outlook.com

如果你的 shell 支持它們,你可以在第一種情況下使用關聯數組:

declare -A list=([john]="john@gmail.com" [doe]="doe@outlook.com" [jenny]="jenny@another.domain")

for i in "${!list[@]}"; do 
 echo "Dear $i, email text" | mail -s "Hello $i" "${list[$i]}"
done

對於第二種情況,一個while循環:

while IFS=, read -r i j; do
 echo "Dear $i, email text" | mail -s "Hello $i" "$j"
done < file.csv

(這假設您的文件是正確格式的 CSV,沒有標題行)。

引用自:https://unix.stackexchange.com/questions/513542