通过 ssh 在远程计算机上按索引访问数组元素

Loz*_*b1k 2 linux arrays ssh bash

在远程计算机上,我需要同时获取 2 个数组的值 \xe2\x80\x8b\xe2\x80\x8b 。即,1 和 2 数组的 1 个元素,然后 1 和 2 数组的 2 个元素,依此类推。

\n

在编写脚本时,我遇到了一个问题,当我使用变量指定数组索引时,仅显示数组的第一个元素,仅此而已。我尝试转义并像这样写 [$i] 但没有结果。我究竟做错了什么?通过索引访问数组元素的正确方法是什么?

\n

我想得到什么:

\n
array1=("1" "2")\narray2=("a" "b")\n\nssh $user_srv@$ip_srv -p $port_srv \'bash -s\' << EOF\nfor i in "${!array1[@]}"\ndo\n    echo \'${array1[$i]}\'\n    echo \'${array2[$i]}\'\ndone\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

结果:

\n
array1=("1" "2")\narray2=("a" "b")\n\nssh $user_srv@$ip_srv -p $port_srv \'bash -s\' << EOF\nfor i in "${!array1[@]}"\ndo\n    echo \'${array1[$i]}\'\n    echo \'${array2[$i]}\'\ndone\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

Cha*_*ffy 7

定义要作为本地函数运行的代码;然后使用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
Run Code Online (Sandbox Code Playgroud)