Назад | Перейти на главную страницу

Разница между одинарными и двойными кавычками при передаче команды через ssh

Когда я отправляю команду на удаленный сервер по 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"