Когда я отправляю команду на удаленный сервер по ssh, в чем разница между:
ssh user@123.456.789.012 'foo'
и
ssh user@123.456.789.012 "foo"
Я не передаю никаких переменных и получаю разные результаты при удаленном выполнении команды.
Возможно, для этого примера нет разницы, но для этого, безусловно, будет:
ssh user@123.456.789.012 "echo $PATH"
Причина в том, что bash будет оценивать и заменять переменные внутри двойных кавычек. на локальной машине но сделаю это на целевой машине внутри одинарных кавычек.
То же самое и с подоболочками:
ssh user@123.456.789.012 "echo `hostname`"
ssh user@123.456.789.012 "echo $(hostname)"
Однако, похоже, это неверно для функций:
$ foo () { echo "Foo"; }
$ foo
Foo
$ ssh user@123.456.789.012 "foo"
bash: foo: command not found
Подстановки также не происходит в двойных кавычках:
$ ssh user@123.456.789.012 "ls -l *"
$ ssh user@123.456.789.012 "ls -l numbered_files.?.gz"