How do I change the decimal separator in the printf command in bash?
bash, locale, printf
Solution
There are several local variables that control the localization of Cygwin (or of any bash shell, for that matter). You can see them along with their value using the `locale` command. You should see something like this:
$ locale
LANG=it_IT.UTF-8
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC="it_IT.UTF-8"
LC_TIME="it_IT.UTF-8"
LC_COLLATE="it_IT.UTF-8"
LC_MONETARY="it_IT.UTF-8"
LC_MESSAGES="it_IT.UTF-8"
LC_ALL=
You can see the possible values of the variables by using `locale -va`. They are all formatted like `<language>_<nation>.UTF-8`. The `UTF-8` part is optional.
In order to switch to "North American" float separation style, simply set `LC_NUMERIC` to its American value:
$ export LC_NUMERIC="en_US.UTF-8"
Simply setting the variable `LC_NUMERIC` as if it were a regular variable won't work. You need to use the export command.
You can put this in the header of your scripts, or you can make it permanent by adding it to your `~/.bashrc` or your `~/.bash_profile` file.
Hope this was helpful!
Problem
I use the Italian localization of Cygwin, and therefore my printf command uses commas to separate floats, and won't understand dot-separated floats ``` $ printf "%f" 3.1415 -bash: printf: 3.1415: invalid number 0,000000 $ printf "%f" 3,1415 3,141500 ``` This gives rise to several problems because basically everything else uses a dot to separate decimal digits. How can I change the decimal separator from comma to dot?