[英]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.