각 목록 항목에 두 개의 값이 포함된 목록

각 목록 항목에 두 개의 값이 포함된 목록

이름과 이메일 주소 목록을 저장하고 단일 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라고 가정합니다.)

관련 정보