繁体   English   中英

ssh bash -s遇到数组变量错误

[英]ssh bash -s meets array variable error

以下脚本将引发错误:

declare -a service_ports=(22 80 443 445)

ssh root@host 'bash -s' << EOF

export x=0
while [ \$x -le "${#service_ports[@]}" ]
do
  echo Port ${service_ports[\$x]} # ERROR HERE
  x=\$(( \$x + 1 ))
done

EOF

当我运行这个bash脚本时,我得到:

./q.sh: line 6: $x: syntax error: operand expected (error token is "$x")

我需要转义$ x变量,因为我使用了“ bash -s ”远程shell。 当我删除反斜杠时,我只访问我的本地变量,而不是执行脚本的服务器上的变量。

有人知道访问阵列内容的解决方案吗?

您可以引用此文档终止符声明,以避免必须转义输入字符串中的任何内容 (当然这也意味着您不能在远程脚本中注入局部变量的值):

my_command << 'EOF'
foo $bar
[...]
EOF

如果你需要注入局部变量内容,你可以改为使用混合引号:

my_input='some $literal$ strings'
my_input="${my_input}${my_variable}"
[...]

此外,您可以通过以下几种方式简化命令:

  • 除非与默认shell不同,否则在运行远程命令时不必指定bash -s
  • export变量没有意义,这些变量未在后续脚本调用中使用
  • 当您立即分配数组文字时,不需要declare -a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM