每个列表项中有两个值的列表

每个列表项中有两个值的列表

我想存储一个包含姓名和电子邮件地址的列表,并在单个 for 循环中使用它。我想在壳牌中做到这一点。

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

list = "john, [email protected]" "doe, [email protected]" "jenny, [email protected]"

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" [email protected]

另外,如果我想在单独的 csv 文件中创建此列表,我将如何使用它?例如

name, email
john, [email protected]
jenny, [email protected]
doe, [email protected]

答案1

如果您的 shell 支持它们,您可以在第一种情况下使用关联数组:

declare -A list=([john]="[email protected]" [doe]="[email protected]" [jenny]="[email protected]")

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,没有标题行)。

相关内容