如何在bash中将带空格的字符串作为一个整体处理?

Zen*_*Zen 8 shell bash shell-script

我想构建一个错误处理程序,它将创建一个标有 error_occur 时间的空文件。

核心思想是使用date命令的结果作为参数。

我做了:

time_stamp=$(date)
touch $time_stamp
Run Code Online (Sandbox Code Playgroud)

但事实证明,这会创建一系列空文件,例如2014, Wed, 11:15:20

如何在此处将时间戳转换为整个字符串?

cuo*_*glm 14

你必须双引号你的变量:

time_stamp="$(date)"
touch "$time_stamp"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,双引号 in"$(date)"不是强制性的,但这样做是一个很好的做法。您可以阅读本文以获得更多理解。


Ant*_*hon 14

cuonglm 的回答一般解决了创建带有空格的文件的问题,但问题是从使用date.

如果您想使用日期或日期时间字符串作为文件名的一部分,您应该始终使用该--rfc-3339选项(如果在最新的 GNU 系统上)或适当的格式字符串。这将为您提供可按逻辑方式排序的文件名。该--rfc-3339选项需要一个参数,使用secondsnsdate取决于你在文件名要准确:

time_stamp="$(date --rfc-3339=seconds)"
touch "$time_stamp"
Run Code Online (Sandbox Code Playgroud)

您还可以获取不带任何空格的特定字符串和您需要的信息date +FORMATman date用于详细信息)。

time_stamp="$(date +%Y%m%d-%H%M)"
touch "$time_stamp"
Run Code Online (Sandbox Code Playgroud)

会给你一个名字像20141029-0944没有空格的文件,给你一种你不需要引用的错觉。但是您仍然这样做,因为您仍然会调用split+glob运算符,如果在$IFS已更改默认值的上下文中使用该运算符,该运算符仍然可以实际拆分。

  • `date --rfc-3339=seconds` 的输出仍然包含空格,为什么不是 `date --iso-8601=seconds`(或只是 `date -Iseconds`)? (2认同)