以下是我在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"目标目录名称包含空格,建议使用带引号()的表单.
更改:
mkdir -p $deploydir
Run Code Online (Sandbox Code Playgroud)
至
mkdir -p "$deploydir"
Run Code Online (Sandbox Code Playgroud)