[英]mkdir error in bash script
以下是我在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
這會產生如下輸出:
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一樣(甚至可能都是它們),Bourne(Again)Shell(sh / bash)區分大小寫。 除了mkdir
命令之外,dir var在所有地方都被稱為deployDir
(mixed-case),它被稱為deploydir
(全部小寫)。 由於deploydir
(全部小寫)是deployDir
(mixed-case)中的一個被認為是不同的變量,而deplydir
(全部小寫)從未為其分配過值,因此deploydir
(全部小寫)的值為空字符串(“”)。
如果沒有引號( mkdir $deploydir
),該行有效地變為mkdir
(只是沒有所需操作數的命令),因此錯誤mkdir: missing operand
。
使用引號( mkdir "$deploydir"
),該行有效地變為mkdir ""
(使用非空目錄名稱為空字符串的目錄的命令),因此錯誤mkdir: cannot create directory
'。
如果目標目錄名稱包含空格,建議使用帶引號的表單( mkdir "$deployDir"
)。
更改:
mkdir -p $deploydir
至
mkdir -p "$deploydir"
出於顯而易見的原因,您不能在Windows上的文件名中使用冒號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.