Linux

echo 命令,需要替換

  • February 20, 2020

我編寫了一個備份日誌腳本並在 echo 中有 2 個變數,但仍然無法正常工作。

我的命令:

echo " DB-Size $ (du -hs /backup/db/db_ $ (日期 +%F).sql " >> /backup/backup.log

在我的 echo 語句中,我有命令變數,在命令變數中有另一個變數。我需要改變什麼。對於每一個幫助,我很感激。

親切的問候

黑鬍子

在 echo 中有 2 個變數

事實上,你沒有。

變數用花括號括起來:

NAME=Fred
echo ${NAME}"

你所擁有的是命令呼叫。"$(" 和 “)” 分隔符內的所有內容都作為單獨的命令執行,並且該命令的輸出作為呼叫的結果“返回”:

echo "$( pwd )" 

我認為您的意圖是根據目前日期創建文件路徑,然後將該文件路徑輸入 du 命令。所以,一步一步:

你的文件路徑是:

/backup/db/db_$(date +%F).sql

這個生成的值中不能有任何空格(%F 返回 YYYY-MM-DD),所以我們不必擔心引用文件路徑。

將其“插入”到 du 呼叫中:

du -hs /backup/db/db_$(date +%F).sql

最後,在“頂級”回顯命令中呼叫它:

echo "DB-Size $(du -hs /backup/db/db_$(date +%F).sql)" >> /backup/backup.log

注意大括號的位置——“$(”開始呼叫,“)”結束。您正在呼叫兩個命令,因此您需要兩個結束的 ‘)’。

另請注意,引號較少 - 一個用於開始字元串值,另一個用於結束它。因為它們是雙引號,shell 將擴展其中的所有位,包括變數和命令呼叫 - 如果它們是引號,它不會這樣做,將整個事物視為字元串文字。

引用自:https://serverfault.com/questions/1003867