결과 변수 확장은 로컬 시스템에서 발생하지만, 원격 컴퓨터에서 변수 i
만 정의했습니다. 확장을 원하는 위치를 신중하게 생각해야합니다. 질문에 i
의 값이 클라이언트 측 또는 서버 측 중 어느 것으로 정의되었는지는 설명하지 않았지만 후속 의견에서 서버 측에서 수행하기를 원하는 것으로 추측합니다.
ssh [email protected] <<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")'
을 :이 경우 당신은 인용주의 요구하는 ssh
통해 배열 내용을 전달해야합니다 -side-EOF
-delimited heredoc 내에서 서버 측을 eval
으로 평가합니다.
ssh [email protected] <<'EOF'
i=1
declare -a array_local='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")'
echo ${array_local[$i]}
EOF
주의 두 예제 사이에 인용 EOF
의 차이 : 즉 그것과 동일합니다. 첫 번째는 매개 변수와 셸 확장을 허용하고 두 번째 매개 변수는 매개 변수와 셸 확장을 허용하지 않습니다. 그렇기 때문에 첫 번째 클라이언트의 echo
행에 인용 부호가 필요하므로 클라이언트 측이 아닌 서버 측에서 매개 변수 확장이 수행됩니다.
어떤 셸을 사용하고 있습니까? 세게 때리다? –
로컬 시스템에 정의 된 변수 ('array_local')가 원격 서버에서 실행되는 완전히 별개의 프로세스에서 다른 쉘 세션에서 여러분을 위해 마술처럼 미리 정의되어 있다고 생각하게 만드는 이유는 무엇입니까? 이 변수는'ssh'를 실행하는 쉘에 국한되어 있습니다. 적절한 인용 부호를 사용하더라도'echo'를 실행하는 쉘 인스턴스에는 설정되어 있지 않습니다 ... – twalberg
@AdamSpiers 예, 그것은 bash 쉘 – user2928822