複数のパラメータを取得するforループ

複数のパラメータを取得するforループ

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

関連情報