gpt4 book ai didi

bash - 在 bash 中创建对象数组

转载 作者:行者123 更新时间:2023-11-29 09:06:50 27 4
gpt4 key购买 nike

是否可以在 bash 中创建对象数组?

这就是我正在尝试的方式:

declare -a identifications=(
{
email = '...',
password = '...'
}
)

declare -a years=(
'2011'
'2012'
'2013'
'2014'
'2015'
'2016'
)

for identification in "${identifications[@]}"
do
for year in "${years[@]}"
do
my_program --type=CNPJ --format=XLS --identification=${identification.email} --password=${identication.password} --competence=${year} --output="$identification - $year"
done
done

显然,这行不通,而且我没有找到实现该目标的方法,因为我没有找到 bash 对象。

最佳答案

你可以用 associative arrays 做点小把戏(在 Bash 4.0 中引入)和 nameref(参见 declare 的手册和 Shell Parameters 的第一段——在 Bash 4.3 中引入):

#!/usr/bin/env bash

declare -A identification0=(
[email]='test@abc.com'
[password]='admin123'
)
declare -A identification1=(
[email]='test@xyz.org'
[password]='passwd1!'
)

declare -n identification
for identification in ${!identification@}; do
echo "Email: ${identification[email]}"
echo "Password: ${identification[password]}"
done

这打印

Email: test@abc.com
Password: admin123
Email: test@xyz.org
Password: passwd1!

declare -A声明一个关联数组。

诀窍是分配以相同前缀开头的所有“对象”(关联数组)变量名,例如 identification . ${!<i>prefix</i>@}符号扩展到所有以 prefix 开头的变量名:

$ var1=
$ var2=
$ var3=
$ echo "${!var@}"
var1 var2 var3

然后,为了访问关联数组的键值对,我们使用 nameref 属性声明 for 循环的控制变量:

declare -n identification

这样循环

for identification in ${!identification@}; do

制造 identification表现得好像它是 ${!identification@} 展开的实际变量一样.

不过,很可能执行以下操作会更容易:

emails=('test@abc.com' 'test@xyz.org')
passwords=('admin123' 'passwd1!')
for (( i = 0; i < ${#emails[@]}; ++i )); do
echo "Email: ${emails[i]}"
echo "Password: ${passwords[i]}"
done

即,只需循环包含您的信息的两个数组。

关于bash - 在 bash 中创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38794449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com