![각 목록 항목에 두 개의 값이 포함된 목록](https://linux55.com/image/152189/%EA%B0%81%20%EB%AA%A9%EB%A1%9D%20%ED%95%AD%EB%AA%A9%EC%97%90%20%EB%91%90%20%EA%B0%9C%EC%9D%98%20%EA%B0%92%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%AA%A9%EB%A1%9D.png)
이름과 이메일 주소 목록을 저장하고 단일 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라고 가정합니다.)