【发布时间】: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参考资料丰富。对于双引号处理建议,已经整理了变量名。