Respostas:
Uma pergunta semelhante foi respondida recentemente : os símbolos são avaliados na linha antes que o símbolo seja definido nesta linha, tornando necessário dividir a definição e o uso dos símbolos para separar as linhas.
Solicitado por um comentário, você poderia ter feito isso:
foo=bar bash -c 'echo $foo'
que primeiro atribui um valor fooe o passa para um novo processo como uma variável de ambiente onde pode ser impresso.
Você pode ler mais sobre isso no reconhecimento do POSIX Shell Command Language Token .
Seguindo o comentário do @mikeserv :
O shell deve ler sua entrada em termos de linhas de um arquivo, de um terminal no caso de um shell interativo ou de uma string no caso de sh -c ou system ().
Depois que um token é delimitado, ele é categorizado conforme exigido pela gramática na Gramática do Shell.
@username...commentespecificar o usuário especificado, receberá uma pequena mensagem informando que você estava conversando com ele. bem, eles serão relevantes para o segmento.
luit.ce eu acho que eu posso apenas mudar setup_io(){ ... ;fnctl(0, [GS]ETFL, 0);...}a fazer 2para o primeiro argumento. bem, acho que as funções copyTermios()e setRawTermios()também precisam de uma pequena modificação, mas acho que deve ser simples. o rc = (return)para cada linha parece estranho - mas também não sou programador de C. isso é coisa sua ou foi herdada? e se o comentário dos espaços em branco se referir a "${set_null_var:=new val and $(echo other stuff)}"você, você estará praticamente seguro com qualquer coisa. algumas conchas fazem coisas estranhas }.
env foo=bar bash -c 'echo $foo'