Parece que todos estão sugerindo usar echo
- pelo menos, na maioria das vezes, felizmente, com -n
, o que alivia um seus problemas (que imprime uma nova linha no final).
Mas echo
não é necessariamente consistente. Ele tem várias peculiaridades comportamentais que você precisa ter em mente e que podem ser incompatíveis entre sistemas. É melhor usar printf
.
Por isso, você deve estar usando
$ printf '%s' 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
$
Com printf
, se você quiser uma nova linha no final, terá que adicioná-la explicitamente:
$ printf '%s\n' 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
$ echo 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
$
em vez de ter que pedir para não obtê-lo (e esperar que echo
funcione da mesma forma no sistema, isso acontece em algum momento posterior):
$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
$
Para expandir o ponto em as peculiaridades de echo
que mencionei acima, aqui estão algumas:
- Funciona de maneira diferente em vários sistemas. Muitos sistemas modernos suportam
-n
para informar echo
para não terminar a saída com uma nova linha, mas alguns podem não. E se você quiser realmente imprimir -n
? Algumas implementações podem realmente diferir com base nas configurações no shell ou no ambiente.
- Ele manipula, ou pode não manipular, algumas seqüências de caracteres (particularmente caracteres com escape de barra invertida) de uma maneira especial. Não é totalmente irracional ter essas senhas, e o POSIX não garante nada sobre o comportamento do eco (seu comportamento é especificamente undefined ) se o primeiro argumento for
-n
ou qualquer um dos seus argumentos backslashes.
As respostas para a pergunta acima sobre o uso de printf em vez de echo têm várias outras, assim como links adicionais para mais leitura, se você estiver curioso.