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.