Невозможно увеличить номер сборки в файле

Я хотел бы увеличить номер сборки в файле как часть процесса сборки.

Сценарий предназначен для поиска .###'/* BUILD-NUMBER */, например:

console.info('Version 1.1.017'/* BUILD-NUMBER */);

Разберите 017, добавьте один, затем снова sprint. Это код, который у меня есть:

perl -pe "s~\.([0-9]+)'/\* BUILD-NUMBER \*/~(sprintf('.%03d%c/* BUILD-NUMBER */', $1, 39))~e" < $U > $T

39 должен соответствовать %c для печати апострофа ', потому что я не мог понять, как вставить его буквально. (Это входит в сценарий bash.)

В любом случае, когда я запускаю вышеуказанное, оно возвращается:

console.info('Version 1.1.001'/* BUILD-NUMBER */);

Итак, я думаю, что это не так. Я пробовал $0, $1, \g1 и т. д., Но он возвращает некоторые странные вещи. Нигде не видит 17.

Кроме того, будут ли ведущие нули в номере сборки заставлять perl интерпретировать строку как восьмеричную? (Причина использования 017 в качестве тестового примера, чтобы увидеть, возвращается ли он как 016 или 018.)

Если бы вы также могли опубликовать образец ввода, нам тоже было бы проще.

RavinderSingh13 31.05.2018 19:34

@Inian Почему вы пометили этот sed? Ни в коде, ни в вопросе нет даже упоминания sed. bash является релевантным тегом, потому что проблема вызвана цитированием оболочки и расширением параметров ($1).

melpomene 31.05.2018 19:58

@melpomene: Согласитесь, вы правы насчет $1 и проблемы цитирования. В общем, оба гарантируют, что тег должен быть общим для shell, а не полностью специфичным для bash. А вот $1 не заметил, а вот метка не помешает.

Inian 31.05.2018 20:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема вызвана использованием "..." для обертывания кода Perl в оболочке. Это заставит оболочку интерполировать свою переменную $1 в код еще до того, как Perl ее увидит.

Исправить:

perl -pe 's~\.([0-9]+)(?='\''/\* BUILD-NUMBER \*/)~sprintf ".%03d", $1 + 1~e'

Кстати, вот как вы вставляете ' в строку '...' в оболочке:

  • ' - конец цитируемого раздела
  • \' - буквальный ' (без обратной косой черты)
  • ' - перезапустить указанный раздел

Я изменил ваше регулярное выражение, чтобы использовать упреждающий просмотр, чтобы не захватывать часть '/* BUILD-NUMBER */, что означает, что мне не нужно заменять ее обратно.

016 не будет интерпретироваться как восьмеричный. Восьмеричный формат используется только для литералов в исходном коде; в данных всегда используется десятичная дробь.

\x39 можно использовать вместо '\''. И более, и менее читабельные.
ikegami 31.05.2018 21:09

@ikegami Но только потому, что это в контексте конструкции Perl, заключенной в двойные кавычки. '\'', по крайней мере, несколько лучше, потому что он работает на уровне оболочки и производит настоящий ' (и потому что мне не нужно запоминать шестнадцатеричные коды для его использования).

melpomene 01.06.2018 08:53

Re "Но только потому, что это в контексте конструкции Perl, заключенной в двойные кавычки.", да это не общее решение. Но когда речь идет о программах на Perl, вы всегда можете избежать использования одинарных кавычек, используя q{}, \x39 или что-то еще.

ikegami 01.06.2018 08:58

Re "и потому что мне не нужно запоминать шестнадцатеричные коды, чтобы использовать его". Как я уже сказал, это не только делает код более читаемым (избегая беспорядка символов), но и делает его менее читаемым (за счет использования «магического числа»). Однако запомнить это довольно просто.

ikegami 01.06.2018 08:59

Другие вопросы по теме