Начальное заполнение нулями целочисленной переменной

Раздел с меткой recoveryбудет фактическим установщиком Windows, поскольку Windows больше не поставляется с компакт-дисками. Раздел TI10686800A— это вашC:\(вы явно используете ноутбук toshiba ). Если вы когда-нибудь планируете вернуть Windows на это устройство, я настоятельно рекомендую сначала создать образ вашего диска, так как после того, как программа восстановления/установки OEM исчезнет, ​​ваши возможности станут ограниченными.

Если вы не планируете хранить Windows, вы можете полностью стереть диск, нет необходимости что-либо хранить, так как Ubuntu поддерживает загрузку EFI и установит загрузчик EFI для вас.

1
06.01.2020, 18:29
2 ответа

С ksh(, который не поддерживает {00..23}, хотя вы можете использовать {0..23%02d}в ksh93 )или zsh(, где расширение {00..23}исходит из ), это с:

typeset -Z2 var

Тогда:

$ var=0
$ echo "$var"
00
$ ((var++))
$ echo "$var"
01

Обратите внимание, что это влияет только на расширение переменной, а не на арифметическое расширение:

$ echo "$((var+1))"
2

Обратите внимание, что переменная также усечена до двух цифр:

$ var=123
$ echo "$var"
23
zsh$ echo $((var)) # value is still 123, only the expansion is truncated
123
ksh$ echo "$((var))" # value truncated upon assignment
23

В zshсм. также ${(l:2::0:)expansion}влево -дополнить (и обрезать )расширение с нулями до длины 2.

POSIX всегда можно использовать:

printf '%02d\n' "$var"

но обратите внимание, что он не усекает до двух цифр (, что в большинстве случаев также хорошо )и работает только с десятичными целыми строками:

Остерегайтесь:

$ bash -c "printf '%02d\n' 010"
08

(то же самое с yash, dash или GNU printf, на самом деле это требование POSIX ).

1
27.01.2020, 23:40

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

Печать целого числа($int)с фиксированной шириной из n цифр с ведущими нулями, если ширина не заполнена, может быть выполнена с помощью:

printf '%0*d' "$n" "$int"

Пример:

$ printf '%0*d' 4 25
0025

$ printf '%0*d' 10 7
0000000007

Чтобы напечатать любое число с единицей ведущим нулем:

$ printf '0%d' 7
07

восьмеричное

Но в оболочке (кроме ksh и zsh )номер 08выдает ошибку:

$ dash -c 'i=08; echo $((i+1))'
dash: 1: Illegal number: 08

Это связано с тем, что в некоторых оболочках число, начинающееся с нуля, интерпретируется как число с основанием 8 (восьмеричное ). В восьмеричном числе 8 не существует. Итак, вам нужен другой способ вычисления, например, bc:

$ i="008"; echo "$i + 1 " | bc
9

Короче говоря, вам нужно что-то вроде:

for i in {00..23}; do hP=$( echo "$i+1" |bc ); printf '%s %02d\n' "$i" "$hP"; done
0
27.01.2020, 23:40

Теги

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