コマンド内のBashパラメータの置換

コマンド内のBashパラメータの置換

私は簡単に理解しましたパラメータの置換、次の部分文字列を含める

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

関連情報