我有一个 Bash 脚本,具有记录带有时间和状态的消息的功能,并且我只想保留我的脚本 80 列:
#!/bin/bash
log_message() {
echo "[$(date)]-[$1] : $2" >> log.txt
}
varName="John Doe"
# line break to not exceed 80 columns
log_message "WARNING" "I am "${varName}" and i want to limit this line \
to 80 columns"
Run Code Online (Sandbox Code Playgroud)
日志文件中的结果不符合预期:
[Fri Jun 24 13:50:12 CEST 2022]-[WARNING] : I am John
Run Code Online (Sandbox Code Playgroud)
在 Bash 中执行此操作的正确方法是什么?
在您的情况下,问题不是行延续,而是您在双引号第二个参数中使用了双引号而不转义它们的事实(请注意,看到 @St\xc3\xa9phane 的答案,可能是您实际上是这样的 - 请参阅下文了解为什么这不是一个好主意)。尝试一下
\nlog_message "WARNING" "I am \\"${varName}\\" and i want to limit this line \\\nto 80 columns"\nRun Code Online (Sandbox Code Playgroud)\n使用 before 未转义的引号${varName},变量引用现在实际上位于双引号之外并受到分词的影响,因此log_message调用会看到以下参数:
WARNINGI am John(该John部分仍将被视为第二个标记的一部分,因为它紧跟在“结束”双引号之后)Doe and i want to limit this line to 80 columns(Doe出于与第二个参数相同的原因附加到John第三个参数)但是,您的函数log_message仅解释前两个参数,因此剩余的字符串片段会丢失。