Bash

在 bash 腳本中,如何在命令中使用變數並分配給新變數?

  • February 18, 2019

我正在嘗試將一個變數的 MD5 儲存到另一個變數中。在反引號和更現代的()符號之間,我無法弄清楚如何將通過命令執行的變數的值分配給另一個變數。範常式式碼:

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

在這裡,hashed變數不起作用,它採用文字字元串backup_dir並對其進行雜湊處理。所以雜湊總是一樣的。有什麼想法嗎?

謝謝!

您期望md5讀取backup_dir變數的值並返回其 MD5 雜湊和。

命令管道

${backup_dir} | md5

將嘗試$backup_dir作為命令執行,將其輸出通過管道傳輸到md5. 我預計會出現“找不到命令”錯誤,d41d8cd98f00b204e9800998ecf8427e以及$hashed.

相反,您需要使用類似的東西

printf '%s' "$backup_dir" | md5

md5在其標準輸入流上給出值。

您也可以使用echo "$backup_dir" | md5or md5 <<<"$backup_dir",但請注意,這會在值的末尾添加一個換行符,$backup_dir這會改變雜湊值。

如果md5md5在 BSD 和類似 BSD 的系統(例如 macOS)上常見的實用程序,那麼您應該使用

md5 -q -s "$backup_dir"

-s選項將字元串作為其參數,並-q導致md5僅列印出該字元串的雜湊值,而不列印其他任何內容。

概括:

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

引用自:https://unix.stackexchange.com/questions/501377