MKDIR错误bash脚本

问题描述:

下面是我在Cygwin的Windows上运行bash脚本的一个片段:MKDIR错误bash脚本

deployDir=/cygdrive/c/Temp/deploy 

timestamp=`date +%Y-%m-%d_%H:%M:%S` 
deployDir=${deployDir}/$timestamp 

if [ ! -d "$deployDir" ]; then 
    echo "making dir $deployDir" 
    mkdir -p $deployDir 
fi 

这将产生输出,如:

making dir /cygdrive/c/Temp/deploy/2010-04-30_11:47:58 
mkdir: missing operand 
Try `mkdir --help' for more information. 

但是,如果我在命令行上键入/cygdrive/c/Temp/deploy/2010-04-30_11:47:58它成功,为什么相同的命令不能在脚本中工作?

谢谢, 唐

变化:

mkdir -p $deploydir 

mkdir -p "$deployDir" 

与大多数Unix shell(甚至所有的shell)一样,Bourne(Again)Shell(sh/bash)区分大小写。 dir var除mkdir命令外,在任何地方都被称为deployDir(混合大小写),它被称为deploydir(全部小写)。由于deploydir(全部小写)是deployDir(混合大小写)和deplydir(全部小写)之间的一个被认为不同的变量,因此从未为其指定值,因此deploydir(全部小写)的值为空字符串(“”)。

没有引号(mkdir $deploydir),该行有效地变为mkdir(只是没有所需操作数的命令),因此错误mkdir: missing operand

随着引号(mkdir "$deploydir"),行有效地成为mkdir ""(命令,使与空字符串的非法目录名的目录),因此错误mkdir: cannot create directory”。

如果目标目录名称包含空格,建议使用带引号的表单(mkdir "$deployDir")。

变化:

mkdir -p $deploydir 

mkdir -p "$deploydir" 

由于显而易见的原因,Windows上的文件名中不能有冒号。

+0

的确如此。但谁说过关于Windows的一切? – 2010-04-30 13:41:51

+0

@丹尼斯:这个问题? “[...]在Windows下运行于cygwin”? – unwind 2010-05-02 17:41:06

+0

哎呀,回到我的幼儿园。但是,Cygwin在文件名中支持冒号。 – 2010-05-02 18:21:06