mkdir没有这样的文件或目录语法错误?

时间:2019-05-30 01:05:15

标签: bash syntax mkdir

我正在尝试自动创建一个唯一的自动文件夹。因此,我试图在日期时间戳之后命名该文件夹。

下面的代码是我已经尝试过的。

#! /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

2 个答案:

答案 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,它是人类可读的,可以很好地排序,并且避免了有问题的字符。