bash脚本中的mkdir错误

Dón*_*nal 14 bash shell mkdir

以下是我在Windows上运行在cygwin下的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
Run Code Online (Sandbox Code Playgroud)

这会产生如下输出:

making dir /cygdrive/c/Temp/deploy/2010-04-30_11:47:58
mkdir: missing operand
Try `mkdir --help' for more information.
Run Code Online (Sandbox Code Playgroud)

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

谢谢,唐

Ber*_*t F 33

更改:

mkdir -p $deploydir
Run Code Online (Sandbox Code Playgroud)

mkdir -p "$deployDir"
Run Code Online (Sandbox Code Playgroud)

像大多数Unix shell一样(甚至可能都是它们),Bourne(Again)Shell(sh/bash)区分大小写.dir var被称为deployDir(混合大小写),除了mkdir命令之外,它被调用deploydir(全部小写).由于deploydir(全部小写)是deployDir(混合大小写)的一个被认为是不同的变量,并且deplydir(全部小写)从未有过分配给它的值,deploydir(全部小写)的值是空字符串("").

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

使用引号(mkdir "$deploydir"),该行有效地成为mkdir ""(使用非空目录名称为空字符串的目录的命令),因此错误mkdir: cannot create directory'.

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