Diferença entre aspas simples e aspas duplas ao passar o comando pelo ssh

4

Quando eu envio um comando para um servidor remoto por ssh, qual é a diferença entre:

ssh [email protected] 'foo'

e

ssh [email protected] "foo"

Não estou passando nenhuma variável e estou obtendo resultados diferentes ao executar um comando remotamente.

    
por BassKozz 10.03.2012 / 16:00

1 resposta

8

Provavelmente não há diferença para esse exemplo, mas certamente haveria para este:

ssh [email protected] "echo $PATH"

A razão é que o bash irá avaliar e substituir variáveis dentro de aspas duplas na máquina local mas irá fazê-lo na máquina alvo dentro de aspas simples.

O mesmo é verdadeiro para subshells:

ssh [email protected] "echo 'hostname'"
ssh [email protected] "echo $(hostname)"

No entanto, parece não ser verdade para funções:

$ foo () { echo "Foo"; }
$ foo
Foo
$ ssh [email protected] "foo"
bash: foo: command not found

A globalização também não acontece entre aspas duplas:

$ ssh [email protected] "ls -l *"
$ ssh [email protected] "ls -l numbered_files.?.gz"
    
por 10.03.2012 / 16:08

Tags