私は簡単に理解しましたパラメータの置換、次の部分文字列を含める
foo="Hello World";
greeting=${foo:0:6}
しかし、これを命令で行うことはできますか?
greeting="Hello"
md5greeting=$(echo $greeting | md5sum :0:6)
>>b1946a
出力は「hello」md5sumの最初の6文字です。
どうやってこれを達成できますか?
答え1
少なくともbashでは、パラメータ置換が機能する方法ではありません。実際の変数(パラメータ)が必要で、それを直接操作します。たとえば、
var=$(echo abcdefgh | cmd1 | cmd2 | ... )
var2="${var:2:4}"
例外は、zsh
コマンド置換を「即時」パラメータに変換し、上記の操作を1行で実行できることです。
var2=${"$(echo abcdefgh | cdm1 | cmd2 | ... )":2:4}
答え2
気づく:
echo $greeting | md5sum
またはより安定しています。
printf '%s\n' "$greeting" | md5sum
変数内容のMD5ハッシュを提供する代わりに、変数内容のMD5ハッシュと改行文字が提供されます。変数コンテンツのMD5ハッシュの場合:
printf %s "$greeting" | md5sum
最初の6バイトには、次のようないくつかの実装がありますhead
。
printf %s "$greeting" | md5sum | head -c 6
または、より携帯性に優れています。
printf %s "$greeting" | md5sum | dd bs=1 count=6 2> /dev/null