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上的文件名中不能有冒号。
的确如此。但谁说过关于Windows的一切? – 2010-04-30 13:41:51
@丹尼斯:这个问题? “[...]在Windows下运行于cygwin”? – unwind 2010-05-02 17:41:06
哎呀,回到我的幼儿园。但是,Cygwin在文件名中支持冒号。 – 2010-05-02 18:21:06