dir1='/d/Dropbox/PhD/Experimental Design/APS/Processed_and_Graphed/InvariantQ'
echo $dir1
for f in A*.xlsx
do
str2=${f%?????}
if [[ ! -d $dir1/$str2 ]]; then
mkdir $dir1/$str2
else
echo "Directory" $dir1/$str2 "already exists, directory not created"
fi
if [[ ! -f $dir1/$str2/$f ]]; then
mv -v $f $dir1/$str2
else
echo "File" $dir1/$str2/$f "already exists, file not copied"
fi
done
我试图让以下脚本运行,但是当它尝试使用mkdir $ dir1 / $ str2时,它会创建:
/ d /升降梭箱/博士/实验
并返回错误:
创建目录' / d / Dropbox / PhD / Experimental':文件存在
创建目录' Design / APS / Processed_and_Graphed / InvariantQ':没有这样的文件或目录
我尝试使用双引号对目录名进行编码,或者使用' \'在“实验设计”中的空间前面,但这两种方法似乎都不起作用......看来这可以在批处理文件中使用" usebackq" - 有没有办法在GitBash for Windows中这样做?如果是这样,我的代码将在何处应用?
此外,是否有人知道为什么在这里使用" [["工作,而单一的" ["没有按'?吨
答案 0 :(得分:1)
引用你的变量以防止在扩展上分词。
dir1='/d/Dropbox/PhD/Experimental Design/APS/Processed_and_Graphed/InvariantQ'
echo "$dir1"
for f in A*.xlsx
do
str2=${f%?????}
if [[ ! -d $dir1/$str2 ]]; then
mkdir "$dir1/$str2"
else
echo "Directory $dir1/$str2 already exists, directory not created"
fi
if [[ ! -f $dir1/$str2/$f ]]; then
mv -v "$f" "$dir1/$str2"
else
echo "File $dir1/$str2/$f already exists, file not copied"
fi
done
它适用于[[
,因为这是shell语法,而不是普通的命令。它专门识别变量,不会分裂它们。这与允许您在不引用它们的情况下使用<
等运算符的原因相同。