SSH接続後、ループ変数の値は空です。

SSH接続後、ループ変数の値は空です。

ループを使用して、リモートホストでいくつかのコマンドをSSHとして実行して実行するスクリプトを作成しようとしています。私が持っている問題の1つは、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前にエスケープしてください。$ssh\

関連情報