С GNU sed (не уверен в других реализациях sed ), вы можете использовать \%pattern%
, где %
— произвольный символ.
Итак, должно работать следующее:
sed "\%$nt%d" text1
"${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"
), иначе вы, скорее всего, столкнетесь с проблемы при использовании переменных, значения которых содержат пробелы или шаблоны подстановки оболочки.
Связанные: