bash 函数没有完全显示日期或 cat 参数

bash 函数没有完全显示日期或 cat 参数

我正在编写一个用于日志存储备份的 bash 脚本。

  • 我使用我定义的函数如下:

    logit () {
        echo " $1  $2 "  >> /path/to/log
    }
    
  • 因为logit 'Starting Backup' $(date +'%D %T')我得到这个输出:

    Starting Backup 01/11/22
    

    所以时间不见了,显然该stdout功能已经缩短了它。

  • 有了echo $(date +'%D %T')我也得到了时间stdout

  • 我还想使用我的日志功能,例如

    logit 'DB-LOGS' $(cat /path/to/sql)
    

    结果是

    DB-LOG mysqldump:
    

    同样,这里缺少一些标准输出。

我应该更改或添加什么到函数中以获得完整的输出?

答案1

双引号命令替换:

logit 'Starting Backup' "$(date +'%D %T')"

如果没有引号,结果会$(date ...)经过分词和文件名通配。没有缩短:假设$IFS仍然设置为其默认值(其中包含空格字符),日期和时间作为单独的参数传递给函数,最终$3您不使用时间。

答案2

您可以"$*"在脚本中使用将所有参数连接到一个字符串。

logit () {
    echo " $* "  >> /path/to/log
}

"$*"使用第一个字符IFS作为连接符,默认为空格。)

或者,如果您想要每个参数周围有额外的空格,请使用printfwith "$@"

logit () {
    { printf " %s " "$@"; echo; } >> /path/to/log
}

(在这里,"$@"分别扩展到每个参数,并printf根据需要重复格式字符串多次。echo添加最后的换行符。)

相关内容