Como interpolar uma variável imediatamente após um '$' ou '\ $' no prompt do bash?

1

Estou usando esta função:

function test(){
  local var="hello"
  PS1="\u$$var"
}

A saída que estou tentando obter da função é john$hello .

Mas o que obtenho é apenas john .

Se eu adicionar um espaço antes de $var , então eu obtenho close para o que eu quero - mas eu não quero o espaço lá.

É possível fazer o que eu quero sem ter esse espaço?

    
por Zabba 24.10.2011 / 03:47

1 resposta

3

Como você usou aspas duplas ao definir PS1 , a substituição da variável é avaliada no ponto em que você atribui a variável. Então você acabou definindo PS1 para \u$hello . O shell expande as variáveis antes de exibir o prompt e, como você não tem nenhuma variável chamada hello , essa parte do prompt é expandida para a string vazia.

Se você definir PS1 usando aspas simples, a substituição de variável não será executada nesse ponto. Isso fará com que a parte $var seja avaliada quando o prompt for mostrado, o que significa que ele não selecionará a variável local que você definiu na função shell.

A terceira opção que deve funcionar com uma variável local a partir de uma função shell é escapar dos meta-caracteres:

PS1="\u\$$var"

Isso deve resultar em PS1 sendo definido como \u$hello . O final do prompt não será alterado quando a variável var for alterada neste caso.

    
por James Henstridge 24.10.2011 / 06:36