이름과 이메일 주소 목록을 저장하고 단일 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
두 번째 경우에는 while 루프입니다.
while IFS=, read -r i j; do
echo "Dear $i, email text" | mail -s "Hello $i" "$j"
done < file.csv
(이는 파일이 헤더 행이 없는 올바른 형식의 CSV라고 가정합니다.)