在一台远程机器上,我需要同时获取两个数组的值​​.也就是说,1和2数组的1个元素,然后是1和2数组的2个元素,依此类推.

在编写脚本时,我遇到了一个问题,当我使用变量指定数组索引时,只显示数组的第一个元素,仅此而已.我试着逃跑,像这样写字,但没有结果.我做错了什么?按索引访问数组元素的正确方式是什么?

我想要的是:

array1=("1" "2")
array2=("a" "b")

ssh $user_srv@$ip_srv -p $port_srv 'bash -s' << EOF
for i in "${!array1[@]}"
do
    echo '${array1[$i]}'
    echo '${array2[$i]}'
done
EOF

结果:

1
a
2
b

推荐答案

将您想要运行的代码定义为local函数;然后使用declare -f来序列化该函数,使用declare -p来序列化它使用的数据,以便通过网络传递这些数据.

array1=("1" "2")
array2=("a" "b")

rmt_func() {
  for i in "${!array1[@]}"; do
    echo "${array1[$i]}"
    echo "${array2[$i]}"
  done
}

ssh "$user_srv@$ip_srv" -p "$port_srv" 'bash -s' <<EOF
  $(declare -p array1 array2)
  $(declare -f rmt_func)
  rmt_func
EOF

Linux相关问答推荐

运行系统命令失败,但相同的命令可以直接在 bash 中执行

如何在Linux下使用正则表达式更改文件名

如何在REPL控制台中使用PowerShell将特定的CSV列转换为TitleCase?

如何修复 script(1) 实用程序输出的换行符?

如何在 Linux 上打印带有屏蔽值的环境名称?

如果列小于 X,linux 合并行

RabbitMQ 安装后没有自动启动

8 个半小时范围的 Crontab 表达式

使用打印命令 Select 子域

使用带有 gnome-keyring 的 Git 凭证助手作为 Sudo 时出错

为什么我不能将 Unix Nohup 与 Bash For 循环一起使用?

在 C 中检测 64 位编译

kdevtmpfsi 使用整个 CPU

将以前忽略的目录添加到 Git 存储库

如何删除 Mercurial 存储库

如何使用 bash 在文件中间添加一行文本?

ctrl-x 在终端中使用时会发送哪个信号?

Vim 增量搜索

如何限制堆大小?

如何将 ISO8859-15 转换为 UTF8?