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