여러 매개변수를 가져오는 for 루프

여러 매개변수를 가져오는 for 루프

Python 및 기타 프로그래밍 언어에서는 어디에서나 루프에서 변수 대신 벡터를 쉽게 얻을 수 있습니다. 파이썬처럼:

for variable in [[user1,pass1],[user2,pass2],[user3,pass3],...]
    print variable[0]
    print variable[1]

하지만 쉘에서 한 주기에 두 개의 매개변수를 얻는 방법은 무엇입니까?

답변1

다음과 같이 산술 for 루프를 사용할 수도 있습니다.

a=(user1 pass1 user2 pass2)
for ((i=0; i<${#a[@]}; i+=2)); do
  echo "${a[i]}: ${a[i+1]}"
done

답변2

Bash에서는 배열을 생성할 수 있지만 중첩된 데이터 구조는 지원되지 않습니다. 그래서 당신은 스스로 뭔가를 해킹해야합니다. 예를 들어 다음과 같이 구분 기호를 사용할 수 있습니다.

#! /bin/bash
for tuple in user1#pass1 user2#ls\;ls user3#pass#3 ; do
    user=${tuple%%#*}
    password=${tuple#*#}
    echo User $user
    echo Password $password
done

첫 번째 값에 구분 기호가 포함되어 있지 않은지 확인하세요.

또는 각 반복에서 set단순 목록과 shift올바른 멤버 수를 사용하십시오.

#! /bin/bash
set -- user1 pass1 user2 ls\;ls user3 pass#3
while (( $# )) ; do
    user=$1
    password=$2
    shift 2
    echo User $user
    echo Password $password
done

답변3

저는 이 작업을 위해 Perl을 사용하는 것을 좋아하는데, 이는 bash 스크립트에서 호출할 수 있습니다.

perl -e 'my %users= ("user1" => "pass1","user2" => "pass2");
         for ( sort keys %users)
         {
             print "$_\t$users{$_}\n";
         }'

관련 정보