Тысячи разделителя в printf в zsh

--diff более предназначается в резервных целях. Например, чтобы проверить, необходимо ли это для tar каталог снова, когда Вы планируете периодическое резервное копирование.

У меня нет подсказки об эффективности --verify опция. Если Вы имеете сомнение относительно этого или хотите смочь проверить целостность Вашего tar позже, можно использовать хеш.

Например:

> sha1sum etc.tar.gz 
b30d837c623274908de2ebaceb72b07c54037546  etc.tar.gz

Затем сохраните эту строку в файл (давайте назовем ее etc.tar.gz.checksum). И когда Вы хотите проверить целостность, переместите этот файл в каталог где etc.tar.gz и выполнен:

> sha1sum -c etc.tar.gz.checksum 
etc.tar.gz: OK

sha1sum обеспечивают openssl.

4
03.07.2014, 00:12
2 ответа

Обновление: начиная с zsh v. 5.1 , встроенная функция printf поддерживает группировку тысяч через ' точно так же, как bash / coreutils printf (см. Также обсуждение здесь ).


Разделитель тысяч - это расширение GNU, которое zsh не поддерживает , и у него есть собственная встроенная функция printf , которую вы в конечном итоге используете. Как упоминалось в связанной публикации, вы можете получить разделитель тысяч, зависящий от локали, с помощью:

zmodload zsh/langinfo
echo $langinfo[THOUSEP]

Если вам нужно использовать zsh специально и исключительно, вы можете использовать его с sed.

Вероятно, проще будет использовать вместо этого не встроенную функцию printf из GNU coreutils , которая разрешит параметр разделителя тысяч, если ваша система это делает:

$ command printf "%'d\n" 1234567890
1,234,567,890

команда printf сообщает shell не для использования встроенных функций или псевдонимов, а для поиска команды в $ PATH .

10
27.01.2020, 20:46

В дополнение к ответу Михаила, можно было бы выполнить форматирование тысячных сэпов вручную с помощью операторов zsh с помощью операторов :

var=1234567

zmodload zsh/langinfo
setopt extendedglob
echo $var[1,(l=-($#var-1)/3*3)-1]${var[l,l?-1:l]//(#m)???/$langinfo[THOUSEP]$MATCH}
3
27.01.2020, 20:46

Теги

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