Как сохранить извлеченное значение в переменной в bash

Они не лишние; есть еще одна тонкость:

  • apt-get upgradeобновит только -установленных пакетов;
  • apt upgradeобновит текущие -установленные пакеты и установит новые пакеты, полученные обновленными зависимостями ;
  • Различные варианты dist-upgradeи full-upgradeбудут обновлять установленные в настоящее время -пакеты, устанавливать новые пакеты, введенные в качестве зависимостей, и удалять пакеты, которые повреждены обновленными пакетами.

Иными словами:

Команда Обновление Установить Удалить
apt-get upgradeДа Нет Нет
apt upgradeДа Да Нет
apt-get dist-upgrade, apt full-upgradeи т. д. Да Да Да

На практике apt upgradeбезопаснееapt-get upgrade(по умолчанию ), поскольку он позволяет автоматически устанавливать обновленные ядра при изменении ABI. См. apt -get upgrade задерживает обновление ядра. Каковы официальные инструкции по применению обновлений в Debian 9? для примера.

apt-get upgradeможно заставить вести себя как apt upgradeс опцией --with-new-pkgs. Это также можно настроить с помощью файлов конфигурации APT; Вы можете увидеть специальные настройки aptс помощью apt-config dump | grep '^Binary::apt(. Здесь используется настройка APT::Get::Upgrade-Allow-New).

0
28.09.2021, 08:37
1 ответ

Предположим, у вас есть имя файла вроде place.type-date.logв переменной file, и вы хотите сохранить часть имени файла до первой точки в другой переменной с именем first. В этом случае вы можете сделать это, используя стандартную подстановку параметров.

first=${file%%.*}

Приведенный выше код удаляет самый длинный суффикс, соответствующий шаблону оболочки .*, из значения $fileи сохраняет результат в first.

Использование %вместо %%вместо этого удалит кратчайший совпадающий суффикс, оставив place.type-date. Использование #или ##вместо %и %%приведет к удалению строк префиксов, а не строк суффиксов.

Другой пример использования этих замен см. в моем ответе на ваш предыдущий вопрос .


Ваш код не работает, потому что $file— это строка place.type-date.log, а не команда. Возможно, вы пытались сделать что-то вроде

first=$( echo "$file" | awk -F '[.-]' '{ print $1 }' )

Но это сложнее, чем должно быть. У него также есть некоторые проблемы, связанные с управляющими последовательностями в именах файлов (, которые echoмогут расширяться )и именах файлов, содержащих новые строки(awk— это инструмент для обработки текста, ориентированный на строку -).

3
28.09.2021, 09:36

Теги

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