簡體   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