我想编写一个将消息写入控制台和日志文件的函数。我最初的尝试是这样的:
function log_write {
local message=$1
local log_file=$2
echo "${message}" | tee -a ${log_file}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 我猜是因为函数上下文中的 echo 意味着“返回一个值”,而不是写入控制台。我错过了什么?我在我的脚本中这样调用它:
message='something interesting happened'
log_file='my_script.log'
$(log_write $message $log_file)
Run Code Online (Sandbox Code Playgroud)
另外,我通过 msysgit 端口在 Windows 上运行它,但我把这个问题加倍了。
该命令替换语法这里的问题是:
$(log_write $message $log_file)
Run Code Online (Sandbox Code Playgroud)
这将调用函数,并返回输出,准备好在变量中捕获。然而,你并没有这样做。
相反,您想像调用任何其他命令一样调用您的函数:
log_write "$message" "$log_file"
Run Code Online (Sandbox Code Playgroud)
请注意引号:它们对于将多字消息作为单个参数保持至关重要。否则,如果你这样做:
message="hello world"
log_write $message $log_file
Run Code Online (Sandbox Code Playgroud)
然后,您将在文件“world”中写入单词“hello”。这是由于变量扩展后分词造成的。经验法则:始终引用您的变量,除非您明确希望省略引号的分词和文件名扩展效果。省略引号也有安全隐患
归档时间: |
|
查看次数: |
75 次 |
最近记录: |