gpt4 book ai didi

bash - bash 脚本中的 mkdir 错误

转载 作者:行者123 更新时间:2023-11-29 08:47:22 25 4
gpt4 key购买 nike

以下是我在 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(混合大小写),它被称为 deploydir(全部小写)。由于 deploydir(全部小写)被认为是与 deployDir(混合大小写)不同的变量,而 deplydir(全部小写)从未有过值分配给它,deploydir 的值(全部小写)是空字符串(“”)。

没有引号 (mkdir $deploydir),该行实际上变成了 mkdir(只是没有所需操作数的命令),因此错误 mkdir: missing操作数.

加上引号 (mkdir "$deploydir"),该行有效地变成了 mkdir ""(创建一个目录的命令,其目录名为空字符串), 因此错误 mkdir: cannot create directory'.

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

关于bash - bash 脚本中的 mkdir 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com