Команда 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