这就是我正在尝试做的......
#!/bin/bash
array_local=(1 2 3 4 5)
ssh user@server << EOF
index_remote=1
echo \$index_remote
echo \${array_local[\$index_remote]}
EOF
当我尝试运行上面的脚本时,我得到的 O/P 为 1 和空值(空格)。我希望 ${array_local[$index_remote} 值为 2 而不是 null,我需要使用远程变量访问此本地数组,以便在脚本中进行进一步的工作。
<<EOF
结果变量扩展发生在本地计算机上,但您只定义了变量i
在远程机器上。您需要仔细考虑要在哪里进行扩展。你没有在你的问题中解释是否有价值i
是在客户端或服务器端定义的,但我从您后续的评论中猜测您希望它在服务器端完成。在这种情况下,您需要将数组内容传递给ssh
,这需要仔细引用:
ssh hostname@server <<EOF
i=1
eval `typeset -p array_local`
echo \${array_local[\$i]}
EOF
typeset -p array_local
将输出字符串
declare -a array_local='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")'
由于这是在反引号内,因此它将在客户端内扩展EOF
- 分隔的heredoc,然后由服务器端评估eval
。换句话说,它相当于:
ssh hostname@server <<'EOF'
i=1
declare -a array_local='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")'
echo ${array_local[$i]}
EOF
注意其中的差异EOF
两个例子之间的引用。第一个允许参数和 shell 扩展,第二个则不允许。这就是为什么echo
第一行中的行需要引用,以确保参数扩展发生在服务器端而不是客户端。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)