Массив возвращает только один элемент

С GNU sed (не уверен в других реализациях sed ), вы можете использовать \%pattern%, где %— произвольный символ.

Итак, должно работать следующее:

sed "\%$nt%d" text1
1
07.10.2019, 09:27
1 ответ
В

"${BACKUP_FILE_ARRAY=[@]}"слишком много =.

Кроме того, для установки массива не используйте mapfile. Просто используйте шаблон оболочки:

BACKUP_FILE_ARRAY=( /data*/"${DBNAME,,}"Backup/"$DBNAME.0.db21.DBPART000.$(date +%Y%m%d)"* )

(если $CURRENTDATEустановлено с CURRENTDATE=$(date +%Y%m%d)где-то в верхней части скрипта, то используйте эту переменную вместо подстановки команд с date, чтобы скрипт не путался, если он работает за полночь ).

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

Чтобы подсчитать количество файлов, соответствующих этому шаблону, сначала создайте массив, а затем используйте

BACKUP_FILE_COUNT=${#BACKUP_FILE_ARRAY[@]}

, чтобы получить количество элементов в нем.

Чтобы добавить это число к COUNTER, используйте стандартное арифметическое расширение:

COUNTER=$(( COUNTER + BACKUP_FILE_COUNT ))

Если вы не знаете, когда вам нужно заключать расширение переменной в двойные кавычки, а когда в этом нет необходимости, выберите использование двойных кавычек (, как в "$myvar"), иначе вы, скорее всего, столкнетесь с проблемы при использовании переменных, значения которых содержат пробелы или шаблоны подстановки оболочки.

Связанные:

2
27.01.2020, 23:30

Теги

Похожие вопросы