我想编写一个将消息写入控制台和日志文件的函数。我最初的尝试是这样的:
function log_write {
local message=$1
local log_file=$2
echo "${message}" | tee -a ${log_file}
}
但这是行不通的-我猜是因为函数上下文中的echo意味着“返回值”,而不是写入控制台。我错过了什么?我在脚本中这样调用它:
message='something interesting happened'
log_file='my_script.log'
$(log_write $message $log_file)
另外,我通过msysgit端口在Windows上运行它,但是我又把问题加倍了。
该命令替换语法这里的问题是:
$(log_write $message $log_file)
这将调用该函数,并返回输出,准备将其捕获到变量中。但是,您没有这样做。
相反,您希望像其他任何命令一样调用函数:
log_write "$message" "$log_file"
请注意引号:它们对于将多词消息作为单个参数至关重要。否则,如果您这样做:
message="hello world"
log_write $message $log_file
然后,您将把单词“ hello”写入文件“ world”。发生这种情况是由于在扩展变量后出现了单词拆分。经验法则:总是用引号引起来,除非您明确希望省略引号的单词拆分和文件名扩展效果。省略引号也有安全隐患
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句