Команда printf внутри скрипта возвращает "неверный номер"

Я не могу получить printf для печати переменной с дескриптором% e в bash script. Он просто сказал бы

#!/bin/bash
a=14.9
printf %e 14.9;

Я знаю, что это, вероятно, очень простой вопрос, но я довольно новичок в bash и всегда использовал echo. Плюс я не мог найти ответ нигде.


при запуске я получаю

$ ./test.text
./test.text: line 3: printf: 14.9: invalid number
0,000000

поэтому моя проблема - это локальная переменная LC_NUMERIC: она настроена так, что я использую запятые как десятичные разделители. Действительно, он настроен на европейскую локализацию:

$ locale | grep NUM
LC_NUMERIC="it_IT.UTF-8"

Я думал, что назначил его en_US.UTF-8, но, видимо, я этого не сделал. Теперь проблема переключается, чтобы определить, как установить переменную locale. Просто используя

$ LC_NUMERIC="en_US.UTF-8"

не будет работать.

Ответ 1

Это:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9

устанавливает $LC_NUMERIC только для продолжительности этой одной команды.

Это:

export LC_NUMERIC="en_US.UTF-8"

устанавливает $LC_NUMERIC только для продолжительности текущего процесса оболочки.

Если вы добавите

export LC_NUMERIC="en_US.UTF-8"

на ваш $HOME/.bashrc или $HOME/.bash_profile, он установит $LC_NUMERIC для всех запущенных оболочек bash.

Найдите существующий код, который устанавливает $LC_NUMERIC в ваши файлы .bashrc или другие файлы запуска оболочки.

Ответ 2

У вас может быть проблема с локалью, и она не ожидала определенного периода. Попробуйте:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9

Ответ 3

Я наткнулся на эту ошибку и нашел эту страницу. В моем случае это была 100% ошибка пилота.

month=2
printf "%02d" month

так должно быть

printf "%02d" "${month}"

или проще

printf "%02d" $month