for 循环获取多个参数

for 循环获取多个参数

在Python和其他一些编程语言中,很容易在任何地方和循环中获取一个向量而不是一个变量。像蟒蛇:

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

但是如何在 shell 中在一个周期内获得两个参数呢?

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

相关内容