名前と電子メールアドレスのリストを保存し、単一の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
シェルがサポートしている場合は、最初のケースで連想配列を使用できます。
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
2番目のケースはwhileループです。
while IFS=, read -r i j; do
echo "Dear $i, email text" | mail -s "Hello $i" "$j"
done < file.csv
(これは、ファイルがヘッダー行がない正しい形式のCSVであると仮定します。)