【问题标题】:How can I print multiple variables using printf如何使用 printf 打印多个变量
【发布时间】:2019-08-24 22:51:05
【问题描述】:

我正在尝试让printf 在一行上输出多个变量。

难以处理printf 的参数和格式并收到意外结果。

代码 sn-p

printf '%s %s %s' $infile $insize $indate 2>&1 | tee -a $logfile
find $infile -printf ' %p %s %CY-%Cm-%Cd %CH:%CM:%.2TS \n' 2>&1 | tee -a $logfile

意外结果
* 第一个文件大小未显示,日期和时间不正确 (printf)
* 第二个文件大小正确,日期和时间不正确(查找 -printf)

ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp 2019-08-25 00:00:00 ./README.ftp 2037 2019-08-25 14:22:26

预期结果

ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp 2037 2015-08-12 15:47:26 ./README.ftp 2037 2019-08-24 20:32:53

远程文件

Last-Modified: Wed, 12 Aug 2015 15:47:26 GMT
Content-Length: 2037

本地文件

2037 Aug 13  2015 README.ftp

提前致谢。

【问题讨论】:

  • 看看help printf
  • man 1 printf 可能提供更多信息。关键是printf 的第一个参数是一个格式字符串,它告诉它如何格式化它打印的内容;剩下的参数是要打印的东西。此外,在变量引用周围加上双引号(例如 "$inpath/$infile.gz" 而不仅仅是 $inpath/$infile.gz)以防止意外解析。
  • 你能给我们看看printf '%s %s %s\n' $inpath/$infile.gz $infilesize $infiledate的输出然后给我们你想要的输出吗?
  • $infilesize 可能需要 %d
  • @GordonDavisson 感谢man 1 printf 参考资料丰富。对于双引号处理建议,已经整理了变量名。

标签: linux bash shell grep


【解决方案1】:

解决方案

printf '%s %d %s' "$infile" "$insize" "$indate" 2>&1 | tee -a "$logfile"
find "$infile" -printf ' %p %s %CY-%Cm-%Cd %CH:%CM:%.2TS \n' 2>&1 | tee -a "$logfile"

结果

ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp 2037 2015-08-12 15:47:26 ./README.ftp 2037 2019-08-24 20:32:53

man 1 printf 参数处理的清晰简单的解释。

format summary 的 GNU 手册输出转换表

【讨论】:

猜你喜欢
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2019-11-30
相关资源
最近更新 更多