2017-01-18 6 views
0

文字列のmd5-hashを作成するbashスクリプトを作成したいと思います。 しかし、文字列には特殊文字とスペースを含めることができます。どのように私はそれを得ることができますそのような文字列は、例えば読むことができます。 md5sum?Bash:特殊文字で文字列のmd5ハッシュを生成する

私は「md5.sh」として、以下のスクリプトを書いた:

#!/bin/bash 
echo -n $1 | md5sum | awk '{print $1}' 

しかし、私は(末尾にスペースで)「./md5.sh」を使用している場合、これは認識されません。 引用符をスクリプトから読み取ることもできません。そして、シングル「プロンプト...

誰かが私を助けることができます:)

+0

printf '%s' "$1" | md5sum | awk '{print $1}' 

第二に、引数として実際のスペースを渡すためにシェルがそれを破棄しないように、それは同様に引用符で囲む必要があります'single 'はプロンプトで終了する' - スクリプトの引数を引用する必要があるので、 './md5.sh'" ''(2つの単一引用符の中の二重引用符)を実行すると、正しい応答が得られます。スペースを含む任意の文字列にも同じです – arco444

答えて

1

まず希望に終わるだろう、あなたはスクリプトでパラメータを引用(とprintfを使用する必要があります。世界はより良い場所になります人々はecho)が存在していた忘れてしまった場合:

./md5.sh " " 
+0

ありがとう、これはスペースで動作しますが、他の特殊文字はどうですか?例えば。文字列に一重引用符と二重引用符の両方が含まれている場合はどうなりますか? – Epyx

+0

両方の型の引用符が含まれている場合は、バックスラッシュでエスケープする必要があります。 '' '\ ""は一重引用符と二重引用符で構成される文字列です。一重引用符( ''\' 'は有効な文字列ではなく、引用符で囲まれたバックスラッシュの後ろに閉じられていない一重引用符で囲まれています)でもエスケープされた一重引用符を含めることはできませんが、' bash'エスケープされた一重引用符を許可する引用符: '$ '\' ''。 – chepner