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";
}'