Bash
bash 函式沒有完全顯示日期或 cat 參數
我正在編寫一個用於備份日誌儲存的 bash 腳本。
- 我使用我定義的函式如下:
logit () { echo " $1 $2 " >> /path/to/log }
- 因為
logit 'Starting Backup' $(date +'%D %T')
我得到這個輸出:Starting Backup 01/11/22
所以時間失去了,顯然該
stdout
功能已經縮短了它。
- 有了
echo $(date +'%D %T')
我也得到了時間stdout
。- 我還想將我的功能用於日誌,例如
logit 'DB-LOGS' $(cat /path/to/sql)
結果是
DB-LOG mysqldump:
同樣,這裡缺少一些標準輸出。
我應該更改或添加什麼功能以獲得完整的輸出?
雙引號命令替換:
logit 'Starting Backup' "$(date +'%D %T')"
沒有引號,結果
$(date ...)
會經過分詞和文件名通配。沒有縮短:假設$IFS
仍設置為其預設值(其中包含空格字元),日期和時間作為單獨的參數傳遞給函式,時間結束於$3
您不使用的時間。
您可以
"$*"
在腳本中使用將所有參數連接到一個字元串。logit () { echo " $* " >> /path/to/log }
(
"$*"
使用IFS
as joiner 的第一個字元,預設為空格。)或者,如果您想要每個 arg 周圍的額外空格,請使用
printf
with"$@"
:logit () { { printf " %s " "$@"; echo; } >> /path/to/log }
(這裡,
"$@"
分別擴展到每個 arg,並printf
根據需要多次重複格式字元串。echo
添加最後的換行符。)