各リスト項目に2つの値を含むリスト

各リスト項目に2つの値を含むリスト

名前と電子メールアドレスのリストを保存し、単一の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であると仮定します。)

おすすめ記事