O que realmente está acontecendo com os backstks bash?

1

Eu sempre pensei em backticks no bash como "executar a saída de 'some_command' ." O que está acontecendo a seguir ... considere um script myscript.pl que imprime o seguinte texto:

   export PS1="[STRING] $PS1"

Se eu copiar a saída de cat file.txt para a linha de comando e executar, "[STRING]" será adicionado à frente do meu prompt.

Por outro lado, o back% de'myscript.pl' faz o prompt "[STRING] . O que está acontecendo?

    
por Andrew Wood 27.01.2011 / 19:50

1 resposta

3

bash não executa a saída de um comando backtick, apenas o substitui. (O recurso é chamado substituição de comando depois de tudo.)

Se a substituição não tiver aspas duplas, a divisão de palavras será feita na saída do comando, mas aspas e outros caracteres especiais são ignorados; export PS1="[STRING] $PS1" é simplesmente dividido por $IFS para:

  • export
  • PS1="[STRING
  • $PS1"

Se você deseja executar o conteúdo de um arquivo, use-o:

. ./file.txt

ou não POSIX:

source ./file.txt

Se você quiser que todas as análises padrão sejam aplicadas a uma substituição - por exemplo, uma variável - você pode usar eval "$commands" ou eval "$(foo)" ou eval "'foo'" . Mas tenha muito cuidado com isso.

    
por 27.01.2011 / 20:12