Arrays 向以变量命名的关联数组添加值
我需要你帮我写一个Arrays 向以变量命名的关联数组添加值,arrays,linux,bash,associative,Arrays,Linux,Bash,Associative,我需要你帮我写一个bash>=4脚本 我正在从远程主机检索一些文件以进行备份。 我有一个for循环,循环遍历主机,为每个主机测试连接,并启动一个检索各种文件的函数 我的问题是,我需要知道出了什么问题(以及是否出了问题),所以我尝试在数组中存储OK或KO值,并在以后解析它 代码如下: ... for remote_host in $hosts ; do short_host=$(echo "$remote_host" | grep -o '^[^.]\+') declare -A
bash>=4
脚本
我正在从远程主机检索一些文件以进行备份。
我有一个for循环,循环遍历主机,为每个主机测试连接,并启动一个检索各种文件的函数
我的问题是,我需要知道出了什么问题(以及是否出了问题),所以我尝试在数组中存储OK或KO值,并在以后解析它
代码如下:
...
for remote_host in $hosts ; do
short_host=$(echo "$remote_host" | grep -o '^[^.]\+')
declare -A cluster
printf "INFO: Testing connectivity to %s... " "$remote_host"
if ssh -q "$remote_host" exit ; then
printf "OK!\n"
cluster[$short_host]="Reacheable"
mkdir "$short_host"
echo "INFO: Collecting files ..."
declare -A ${short_host}
objects1="/etc/krb5.conf /etc/passwd /etc/group /etc/fstab /etc/sudoers /etc/shadow"
for obj in ${objects1} ; do
if file_retrieve "$user" "$remote_host" "$obj" ; then
-> ${short_host}=["$obj"]=OK
else
${short_host}=["$obj"]=KO
fi
done
...
因此,我使用一个名为cluster
的数组列出节点是否可访问,另一个数组(以节点的短名称命名)列出单个文件的OK或KO。
在执行时,我得到了以下错误(第130行是我用上面的箭头标记的行):
/test.sh:line 130:ubuntu01=[/etc/krb5.conf]=OK:未找到命令
我认为这肯定是一个synthax错误,但我无法修复它。我尝试了很多组合,但都没有成功
感谢您的帮助。由于数组名称包含在变量
短列表中,您需要eval
才能使分配生效:
${short_host}=["$obj"]=OK
将其更改为:
eval ${short_host}=["$obj"]=OK
eval ${short_host}=["$obj"]=OK
类似职位:
谢谢,但是实际上short\u host
不是数组的名称。数组的名称是节点的短名称,因为我在for循环中,所以在迭代时会发生变化。这就是为什么我使用$符号将其称为变量。如果我不这样做,它将创建一个名为short\u host
的数组,不是吗?我误解了吗?谢谢,这救了我一天!我不得不说,我已经猜到了eval,但我在stackoverflow上看到eval是邪恶的(字面意思),所以我不确定!。再次感谢<如果控制传递给它的字符串,则code>eval
并不是真正的邪恶。