Differenza tra virgolette singole e doppie virgolette quando passano il command tramite ssh

Quando invio un command a un server remoto su ssh, quale è la differenza tra:

ssh user@123.456.789.012 'foo' 

e

  • SSH torna alla macchina locale da una session SSH remota
  • Determinare se il filesystem o la partizione sono installati RO o RW tramite Bash Script?
  • Perché sshd impegna PAM ancora?
  • Estrarre il nome del repository da url GitHub in bash
  • Chi può eliminare un file?
  • Come posso recuperare il nome di file assoluto in uno script di shell su Mac OS X?
  •  ssh user@123.456.789.012 "foo" 

    Non sto trasmettendo alcuna variabile, e ottengo risultati diversi quando esegue un command in remoto.

    One Solution collect form web for “Differenza tra virgolette singole e doppie virgolette quando passano il command tramite ssh”

    Probabilmente nessuna differenza per questo esempio, ma certamente sarebbe per questo:

     ssh user@123.456.789.012 "echo $PATH" 

    Il motivo è che bash valuterà e sostituisce le variables all'interno di doppie virgolette sulla macchina locale, ma lo farà sulla macchina di destinazione all'interno di virgolette singole.

    Lo stesso vale per i sottogruppi:

     ssh user@123.456.789.012 "echo `hostname`" ssh user@123.456.789.012 "echo $(hostname)" 

    Tuttavia, non sembra vero per le funzioni:

     $ foo () { echo "Foo"; } $ foo Foo $ ssh user@123.456.789.012 "foo" bash: foo: command not found 

    Globbing non avviene anche in double citazione:

     $ ssh user@123.456.789.012 "ls -l *" $ ssh user@123.456.789.012 "ls -l numbered_files.?.gz" 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.