我正在尝试自动创建一个唯一的自动文件夹。因此,我试图在日期时间戳之后命名该文件夹。
下面的代码是我已经尝试过的。
#! /bin/bash
d_space=$(date)
d_nospace= echo ${d_space//[[:blanl:]]/}
echo $d_nospace
mkdir -p "$d_nospace"
WedMay2920:52:47EDT2019
mkdir: cannot create directory '': No such file or directory
答案 0 :(得分:2)
d_nospace= echo ${d_space//[[:blanl:]]/}
您缺少$(...)
捕获运算符。等号后不应有空格。并且blanl
应该是blank
。
d_nospace=$(echo ${d_space//[[:blank:]]/})
让我们摆脱useless use of echo。无需回显变量,然后捕获输出。只需直接分配变量即可。
d_nospace=${d_space//[[:blank:]]/}
(顺便说一下,您不必除去空格。目录名可以包含空格,这很好。)
答案 1 :(得分:0)
d_nospace= echo ${d_space//[[:blanl:]]/}
...
mkdir -p "$d_nospace"
您正在尝试创建一个名称为空字符串的目录。 “没有这样的文件或目录”消息有点误导。真正的问题是名称无效。
变量赋值在=
字符之前或之后必须没有空格。您可以将变量分配作为另一个命令的一部分,例如:
foo=bar some_command
将在some_command
设置为$foo
的情况下执行bar
。
因此,您的命令将变量echo
设置为空时调用d_nospace
命令。
正如John's answer所指出的,您无需在这里使用echo
-实际上,这样做是没有意义的。如果要删除空格,请输入:
d_nospace="${d_space//[[:blanl:]]/}"
(我没有检查准确性;不是[[:blank:]]
吗?
偶然地,我不会将date
的输出用作文件名或目录名。空格和冒号可能会导致问题,输出可能会因您的语言环境设置而异,并且结果排序不正确。
这就是我要做的:
now="$(date +%F-%H%M%S)"
mkdir -p "$now"
在我写这篇文章的时候,目录名应该是2019-05-29-191819
,它是人类可读的,可以很好地排序,并且避免了有问题的字符。