我有一个构建脚本,它将一些文件复制到构建文件夹。
构建脚本用于各种应用程序,每个应用程序需要部署的文件略有不同。因此,需要对脚本中嵌入的文件进行注释。
我的第一次尝试看起来像这样
dest=$outputfolder
"rm *.* $dest
SRC_DIR="./../../source"
files=(
$SRC_DIR/../*.txt
$SRC_DIR/../resources/*.ico
$OUTPUTDIR/$OUTPUTFILENAME
#
#DS Binaries
$OUTPUTDIR/dslCommon.dll
$OUTPUTDIR/dslIPC.dll
$OUTPUTDIR/atVCLCommon.dll
$OUTPUTDIR/atSSI.dll
#BPL's
$BDSCOMMONDIR/BPL/dslVCLComponents.bpl
$BDSCOMMONDIR/BPL/atVCLDataModules.bpl
)
for file in $files
do
echo $file
done
上面的一些变量是传递给脚本的参数。
删除上面文件列表中不相关的行并使其适合 for 循环的最佳方法是什么?
搜索时,我仅找到具有“完美”列表的示例,即没有内联注释、空行等。
更新:下面的答案表明列表可以包含注释和空行,因此不需要“清理”。
答案1
我不知道你说的“清理”上面的文件列表”到底是什么意思,但你应该做的第一件事是使用files
大批您创建的不是一些普通的files
变量:
for file in "${files[@]}"
do something
done
此外,由于变量没有被引用,你的代码很容易出错。创建数组的工作原理如下:
files=(
# comments are just comments
a
a b c # three separate entries
"a b c" # one entry
# therefore
/my directory/ # two entries
"/my directory/" # one entry
# empty line doesn't matter
""
# the above is an empty entry
# this won't fail with paths containing spaces etc.
"$SRC_DIR/../"*.txt
"$OUTPUTDIR/$OUTPUTFILENAME"
"$OUTPUTDIR/dslCommon.dll"
"$BDSCOMMONDIR/BPL/dslVCLComponents.bpl"
)