То, как я удаляю продвижение, обнуляет от вывода 'даты', или избегайте восьмеричной интерпретации таких десятичных чисел?

Как практический ответ о том, как сделать то, что записал @phunehehe, я предложу, чтобы во время установки прецессировали других дистрибутивов, у Вас есть выбор (обычно под усовершенствованной кнопкой) для удаления галочки у опции установить Личинку на MBR, и следовательно можно быть уверены, что текущая Личинка не заменяется.

Но для создания Личинки Ubuntu для знания на новых дистрибутивах, необходимо зондировать диск для другой установки OSs с программой как тестер OS, который делает это автоматически для Вас, когда Вы работаете sudo grub-mkconfig -o /boot/grub/grub.cfg (конечно, после резервного копирования grub.cfg файл). и sudo update-grub в конце.

В случае, если это имеет трудное время для нахождения OSs, можно создать пользовательский файл (40_custom), и в нем указывают на другое ядро OSs и initrd файлы, видят эту человечность статья Wiki о Grub2, это включает всю информацию, в которой Вы нуждаетесь.

39
04.06.2018, 11:09
4 ответа
  • В Вашем случае можно просто отключить нулевое дополнение, добавляют - после % в строке формата даты: %-H

    По умолчанию дата заполняет числовые поля, обнуляет. Следующие дополнительные флаги могут следовать за '%':

    • - (дефис) не заполняет поле
    • _ (подчеркивание) клавиатура с пробелами
    • 0 (нулевая) клавиатура с нулями
    • ^ используйте верхний регистр, если это возможно,
    • # используйте противоположный случай, если это возможно,

    См. руководство даты

  • Если Вы хотите интерпретировать число в другой основе в ударе

    • Константы с продвижением 0 интерпретируются как восьмеричные числа.
    • Продвижение 0x или 0X обозначает шестнадцатеричный.
    • Иначе числа принимают форму [base#] n, где основой является десятичное число между 2 и 64 представлениями арифметической основы, и n является числом в той основе

    Так, для интерпретации числа как десятичного числа использовать 10#n форма, например. 10#09

    echo $((10#09*2))
    18
    

    Посмотрите раздел Arithmetic Evaluation руководства удара.

51
27.01.2020, 19:35
  • 1
    спасибо, очень подробное! btw, echo $((011)) $((10#011)) другой хороший пример, который это производит 9 11 –  Aquarius Power 30.04.2013, 00:10
  • 2
    Это не работает на отрицательные числа: lat=048 ; latd=${lat#0} ; echo $((latd-1)) работы, но lat=-048 ; latd=${lat#0} ; echo $((latd-1)) не делает. –  Luis A. Florit 12.02.2016, 02:17
  • 3
    plus=$((10#01)) –  Dr Beco 25.03.2017, 01:21

Портативно, можно легко удалить продвижение 0 от переменной. Это оставляет переменную без изменений, если нет никакого продвижения 0.

eval $(date +"h=%H m=%M")
h=${h#0}
m=${m#0}
say "$h hours and $m minutes"

В ударе, ksh или zsh, можно использовать дополнительные шаблоны шарика ksh для удаления любого количества продвижения 0s. В ударе, выполненном shopt -s extglob сначала. В zsh, выполненном setopt kshglob сначала.

eval $(date +"h=%H m=%M")
h=${h#+(0)}
m=${m#+(0)}
say "$h hours and $m minutes"
2
27.01.2020, 19:35

В целом в ударе:

test ${#number} -eq 2 && number=${number#0}

получающийся в

date +"%H %M" | 
{ read hours minutes
hours=${hours#0}
minutes=${minutes#0}
echo "${hours} hours and ${minutes} minutes"; }

Или, отличающийся:

date +"%H hours and %M minutes" | sed -n -e 's/0\([0-9]\)/\1/g' -e p

Я удивлен, что дата не имеет соответствующих параметров формата.

1
27.01.2020, 19:35

Если вы пытаетесь выполнить сравнение в десятичном формате со значениями даты, я обнаружил, что этот метод очень эффективен:

let mymin=$(date '+1%M') ; let mymin=$mymin%100

Это всегда дает десятичное значение.Итак, я могу сделать следующее:

if [[ $mymin -le 1 ]]; then   # only 0 and 1 are true.

Таким образом, нет проблем с 08 или 09. Использование% 10 вместо% 100 дает вам десятиминутные диапазоны от 0 до 9. Я также обнаружил, что следующее дает десятичные значения без ведущих нулей:

echo "$((10#$(date +%M)))"
2
27.01.2020, 19:35

Теги

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