Está sob a gramática de shell, comandos simples (ênfase adicionada):
A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator. The first word specifies the command to be executed, and is passed as argument zero. The remaining words are passed as arguments to the invoked command.
Então você pode passar qualquer variável que quiser. Seu echo
exemplo não funciona porque as variáveis são passadas para o comando, não definidas no shell. O shell expande $x
e $y
antes de invocar o comando. Isso funciona, por exemplo:
$ x="once upon" y="a time" bash -c 'echo $x $y'
once upon a time