Манипуляции со строками с использованием сценариев, в которых отсутствует 0 при усечении и замене

Если вы войдете в систему как пользователь root и запустите

/usr/sbin/logrotate -v /etc/logrotate.conf

вы увидите этот вывод на экране. Проблема в -v, которую вы должны удалить. Вы найдете -vздесь:

$ grep -r logrotate /etc/cron*

Пример вывода:

/etc/cron.daily/logrotate:test -x /usr/sbin/logrotate || exit 0
/etc/cron.daily/logrotate:/usr/sbin/logrotate -v /etc/logrotate.conf

Когда cronполучает вывод, он по умолчанию отправляется пользователю root.

1
07.01.2020, 08:48
1 ответ

Это связано с тем, что начальный 0отбрасывается при оценке арифметического контекста $((..)), где он выполняет преобразование чисел в основание 10. Один из способов сохранить начальный 0, используя printf()для добавления ведущие нули

num=${myVer##*[!0-9]}
p=${myVer%%$num}
numLen=${#num}

теперь, используя эту длину, выполните вызов printf()для добавления начальных нулей

printf -v leadzero "%0*d" "$numLen" "$((10#$num-1))"
lastver="$p$leadzero"
printf '%s\n' "$lastver"

Вы можете добавить префикс 10#$перед num-1, чтобы позаботиться о числах в восьмеричном формате.

1
27.01.2020, 23:40

Теги

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