SSH 连接后循环变量的值为空

SSH 连接后循环变量的值为空

我正在尝试编写一个脚本,该脚本将在循环的帮助下执行 ssh 并在远程主机上运行一些命令。我遇到的问题之一是,当我运行 for 循环时,它输出为 null。

migration_array=($1)
Environment=$2

case "$Environment" in

       "Feature")
                echo "Running test on Feature"
                ssh -tt [email protected] -p 1234 <<EOF
                for i in ${migration_array[@]}; do
                   echo "file: $i"
                done
                exit
EOF
       ;;

        *)
            echo "unknown environment!"
        ;;

esac

输出

Last login: Thu Feb 13 15:52:43 2020 from 10.0.10.88

jenkins@feature:~$ 
>                    do
>                    echo "file: "
>                 done
file: 
jenkins@ffeature:~$                 exit
logout
Connection to 10.0.10.100 closed.

答案1

我通过将斜杠添加到循环变量来使其工作,

echo "file: \$i"

答案2

它不是 null,它是一个空字符串(不是同一件事)。

您遇到的问题是变量正在被此处的文档(<<)提前扩展。您需要稍后通过ssh.因此,通过在其前面放置 a$来转义 ,以便将其传递到。ssh\

相关内容