Pythonや他のプログラミング言語では、どこからでもループから変数の代わりにベクトルを簡単に取得できます。 Pythonのように:
for variable in [[user1,pass1],[user2,pass2],[user3,pass3],...]
print variable[0]
print variable[1]
しかし、シェルから1サイクルに2つのパラメータを取得する方法は?
答え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";
}'