Isso falha, pois printf
interpreta algumas letras da barra invertida em seu primeiro argumento como especial.
Em geral, ao usar printf
, você fornece
- Uma cadeia de formatação estática, possivelmente contendo marcadores para os dados que devem ser obtidos dos outros argumentos e
- Outros dados variáveis a serem usados nos espaços reservados na string de formatação estática.
Isso significa que o primeiro argumento para printf
pode sempre ser uma única string entre aspas.
No shell, você pode usar apenas %s
como um espaço reservado para praticamente qualquer coisa na string de formatação, a menos que você queira coisas como preenchimento da esquerda / direita (por exemplo, %20s
para usar 20 caracteres em uma string justificada à direita) ou %-20s
para uma string justificada à esquerda), um determinado número de casas decimais em floats ( %.3f
para três casas decimais) ou preenchimento zero de inteiros ( %08d
para oito dígitos, preenchimento zero) etc.
Por exemplo, para imprimir sua string, use %s
na string de formatação:
v='\u\$'
printf 'PS1 will be set to "%s"\n' "$v" # or just: printf '%s\n' "$v"
PS1="$v"
ou
PS1='\u\$'
printf 'PS1 was set to "%s"\n' "$PS1" # or just: printf '%s\n' "$PS1"
Isto irá produzir
PS1 will be set to "\u\$"
e
PS1 was set to "\u\$"
Veja printf(1)
e / ou printf(3)
no seu sistema ( man 1 printf
e man 3 printf
).
Note também que PS1
não precisará ser exportado.