-3

У меня есть скрипт сборки, который копирует несколько файлов в папку сборки.

Сценарий сборки используется для различных приложений, и для каждого приложения необходимо развернуть несколько разных файлов. Из-за этого нужны комментарии к файлам, встроенным в скрипт.

Моя первая попытка выглядит так

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 ответ1

4

Я не знаю, что именно вы подразумеваете под "очищением" списка файлов выше, но первое, что вы должны сделать, это использовать созданный вами массив 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"
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .