[英]Parameter substitution in a string bash
在我的shell腳本,我已經定義了我需要登錄的信息幾條短信,WARN或錯誤。
消息如下:
###### This may not be correct syntax as I need to know this #######
BACKUP_INFO="File {} is compressed at path {}."
ERROR_FILE_NOT_EXIST="File {} doesn\'t exist."
OTHER_ERROR="Cannot backup File {}, Reason: {}"
我有一個方法來記錄在文件中這樣的信息:
function print_info() {
echo -e "$(date +'%F %T') ${SCRIPTNAME}: INFO: ${*}" | tee -a ${LOGFILE};
}
現在,我需要通過我的消息的方法打印信息以這樣的方式,第一個參數應放在第一{},第二個參數應放在第二{},等等。
即使我試圖聲明我的信息為
BACKUP_INFO="File $FILE_NAME is compressed at path $BACKUP_DIR."
但問題是變量FILE_NAME和BACKUP_DIR了一種方法內,並且該消息是全局定義。
有點我想用它,如下圖所示:
print_info $BACKUP_INFO $FILE_NAME $FILE_PATH
使輸出應是
2015-03-13 07:05:05 : INFO: File /opt/mgtservices/relay.log is compressed at path /root/backup
我需要知道正確的語法才能實現此目的。
您可以使用printf
,在占位符中使用“ %s
”。
這是一個例子:
SCRIPT_NAME="foo.sh"
FORMAT="hello %s, %s"
print_info() {
format="$1"
shift
printf "$(date +%F) $SCRIPT_NAME: $format\n" "$@"
}
name="bob"
message="how are you?"
print_info "$FORMAT" "$name" "$message"
由於參數無論如何都是上下文相關的,因此將這些參數抽象到全局變量中包含消息字符串的位置並沒有多大意義。 無論哪個函數需要打印BACKUP_INFO
還需要知道字符串中有哪些占位符,因此它也可能直接包含字符串。 如果您不希望這樣做,也可以將其更改為功能。
print_info () {
local fmt
fmt=$1
shift
printf "$(date +'%F %T') ${SCRIPTNAME}: INFO: $fmt\n" "$@" | tee -a "$LOGFILE"
}
backup_info () { print_info 'File %s is compressed at path %s.' "$1" "$2"; }
error_file_not_exist () { print_info "File %s doesn't exist." "$1"; }
# XXX FIXME: "other_error" is really a misnomer!
other_error () { print_info 'Cannot backup File %s, Reason: %s' "$1" "$2"; }
碰巧的是,如果您想為腳本提供本地化支持,這實際上也可能會帶來一些好處。 然后,如果英語字符串的單詞順序對於目標語言而言是錯誤的,則翻譯人員可以使用另一種替代英語格式設置功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.