bashスクリプトでコマンドに変数を使用して新しい変数に割り当てる方法は?

bashスクリプトでコマンドに変数を使用して新しい変数に割り当てる方法は?

ある変数のMD5を別の変数に保存しようとしています。バックティックと最新の()表記の間で、コマンドを介して実行される変数の値を他の変数に割り当てる方法はわかりません。サンプルコード:

#!/bin/bash
backup_dir=$(date +%Y-%m-%d_%H-%M-%S)
hashed=$( ${backup_dir} | md5)

ここでhashed変数は機能せず、リテラル文字列を取得してハッシュbackup_dirします。したがって、ハッシュ値は常に同じです。どんなアイデアがありますか?

ありがとうございます!

ベストアンサー1

md5変数の値を読み、対応するbackup_dirMD5ハッシュ合計を返そうとします。

コマンドパイプライン

${backup_dir} | md5

$backup_dirコマンドで実行しようとし、出力をmd5d41d8cd98f00b204e9800998ecf8427e$hashed

代わりに、次のようなものを使用する必要があります。

printf '%s' "$backup_dir" | md5

md5標準入力ストリームに値を提供します。

echo "$backup_dir" | md5またはを使用することもできますが、これmd5 <<<"$backup_dir"は値の末尾に改行文字が追加され、ハッシュ値が$backup_dir変更されることに注意してください。

md5このmd5ユーティリティがBSDやBSDのようなシステム(macOSなど)で一般的に使用されている場合は、次のものを使用する必要があります。

md5 -q -s "$backup_dir"

この-sオプションは、文字列を引数として使用してその文字列のハッシュのみを印刷し、他の内容は印刷しません-qmd5

要約:

#!/bin/bash
backup_dir=$(date +%Y-%m-%d_%H-%M-%S)
hashed=$(md5 -q -s "$backup_dir")

おすすめ記事