Тысяча разделителей в printf в zsh
Я пытаюсь определить разделитель тысяч в printf
какое-то время, и я обнаружил, что у zsh есть некоторые проблемы с ним.
В bash я могу использовать что-то вроде:
- Как объявить некоторые псевдонимы динамически в zsh?
- В чем ключевое различие между конфигурацией grml zsh и конфигурацией oh-my-zsh
- zsh скрипт успешно тестирует ssh или нет
- Файлы инициализации оболочек
- git завершение с zsh: имена файлов с пробелами не сбрасываются должным образом
$ printf "%'d\n" 1234567890 1,234,567,890
но в zsh это не сработает:
$ printf "%'d\n" 1234567890 printf: %': invalid directive
Я только что узнал, что coreutils printf
сделает это просто отлично:
$/usr/bin/printf "%'d\n" 1234567890 1,234,567,890
Как использовать разделитель тысяч в zsh?
$ zsh --version zsh 5.0.2 (x86_64-pc-linux-gnu)
- oh-my-zsh завершение в именах домашних каталогов
- Сделайте «.» И «источник» по умолчанию равным ~ / .zshrc
- предотвращение очистки экрана при выходе из сеанса ssh
- zsh !! и! $ auto выполняется так же, как и в bash
- Распространение тысяч файлов по подпапкам
- Разделить массив Zsh от подоболочки по переводу строки
- Множественные замены в zsh?
- Могу ли я ссылаться на команду перед '&&' после '&&'
2 Solutions collect form web for “Тысяча разделителей в printf в zsh”
Обновление: с zsh v. 5.1
, встроенный printf
поддерживает группировку тысяч через '
точно так же, как bash
/ coreutils
printf
(см. Также обсуждение здесь ).
Разделитель тысяч – это расширение GNU, которое zsh не поддерживает , и у него есть собственный встроенный printf
который вы используете вместо этого. Как упоминалось в связанном сообщении, вы можете получить языковой зависимый разделитель тысяч:
zmodload zsh/langinfo echo $langinfo[THOUSEP]
Если вам нужно специально и исключительно использовать zsh, вы можете использовать это с sed.
Вероятно, проще будет использовать нестроенный printf
от GNU coreutils , что позволит использовать параметр separator тысяч, если ваша система:
$ command printf "%'d\n" 1234567890 1,234,567,890
command printf
сообщает оболочке не использовать встроенный или псевдоним, а искать команду в $PATH
.
Чтобы дополнить ответ Майкла , вы можете сделать форматирование с тысячей дескрипторов вручную с помощью операторов 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}
- Как заполнить конечные теги с помощью sed, awk или любой другой команды?
- получить части строки, используя сценарий оболочки