使用shell脚本用点创建的目录名称

问题描述 投票:0回答:2

我正在使用 Cygwin Terminal 运行 shell 来执行 Windows 7 系统的 shell 脚本。 我正在创建目录,但它的创建名称中带有一个点。

test.sh

#!/bin/bash
echo "Hello World"
temp=$(date '+%d%m%Y')
dirName="Test_$temp"
dirPath=/cygdrive/c/MyFolder/"$dirName"
echo "$dirName"
echo "$dirPath"
mkdir -m 777 $dirPath

在执行

sh test.sh
时,其创建文件夹为
Test_26062015
,而期望为
Test_26062015
。为什么这3个特殊承租人会来,我该如何纠正它

bash shell windows-7 cygwin sh
2个回答
2
投票

在最后一个命令中双引号

$dirPath
并添加
-p
以在目录已存在时忽略
mkdir
失败:
mkdir -m 777 -p "$dirPath"
。除此之外,组合变量和字符串时要小心:
dirName="Test_${temp}"
看起来比
dirName="Test_$temp"
更好。

此外,还可以使用 this 对脚本进行静态分析。


更新:通过分析

sh -x
的调试输出,问题是由于OP脚本中的DOS风格的行结尾而出现的。将文件转换为 UNIX 格式解决了问题。


0
投票

即使您的脚本文件使用 UTF-8 编码,也会出现 Carriage Return CR 字符 + Line Feed LF 字符。

由于 Cygwin linux 只能识别 Line Feed 字符,因此您的命令将其附加到文件夹名称中,从而在文件夹名称末尾创建点字符。

© www.soinside.com 2019 - 2024. All rights reserved.