Bash
在 bash 腳本中,如何在命令中使用變數並分配給新變數?
我正在嘗試將一個變數的 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" | md5
ormd5 <<<"$backup_dir"
,但請注意,這會在值的末尾添加一個換行符,$backup_dir
這會改變雜湊值。如果
md5
是md5
在 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")