2012-10-11 31 views
5

Tôi không thể nhận được printf để in biến có% e descriptor trong tập lệnh bash. Nó sẽ chỉ nóiLỗi không thể giải thích trong bash: lệnh printf bên trong tập lệnh trả về "số không hợp lệ"

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

Tôi biết đây có thể là một câu hỏi rất dễ, nhưng tôi khá mới để bash và luôn sử dụng echo. Thêm vào đó, tôi không thể tìm thấy câu trả lời ở đâu cả.


khi chạy tôi nhận được

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

do đó vấn đề của tôi là LC_NUMERIC biến ngôn ngữ: nó được thiết lập để tôi sử dụng dấu phẩy như dải phân cách thập phân. Thật vậy, nó được đặt thành nội địa hóa châu Âu:

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

Tôi nghĩ rằng tôi đặt nó thành en_US.UTF-8, nhưng rõ ràng là không. Bây giờ vấn đề chuyển đổi để tìm cách thiết lập biến miền địa phương của tôi. Chỉ cần sử dụng

$ LC_NUMERIC="en_US.UTF-8" 

sẽ không hoạt động.

+4

Bạn nhận được gì? Hoạt động tốt hơn ở đây ... –

+0

Trong khi mã hoạt động tốt ở đây (kết quả 1.490000e + 01), trang này http://linuxconfig.org/bash-printf-syntax-basics-with-examples chỉ ra rằng% e có thể/nên được đặt bên trong dấu ngoặc kép. I. printf "% e" 14.9; – enhzflep

+0

@enhzflep: thankyou, nhưng vấn đề không phải vậy. Bạn không cần đặt các đối số của printf trong dấu ngoặc kép, trừ khi các đối số không cần nó. Bên cạnh đó nó hoạt động mà không có họ anyway. Tôi có thể đặt biến với $ xuất LC_NUMERIC = "en_US.UTF-8" nhưng điều này là không có hiệu quả. Làm thế nào tôi có thể làm cho nó vĩnh viễn? Tôi chạy Cygwin. –

Trả lời

8

này:

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

bộ $LC_NUMERIC chỉ trong suốt thời gian đó một lệnh.

này:

export LC_NUMERIC="en_US.UTF-8" 

bộ $LC_NUMERIC chỉ trong suốt thời gian của quá trình shell hiện hành.

Nếu bạn thêm

export LC_NUMERIC="en_US.UTF-8" 

để $HOME/.bashrc hoặc $HOME/.bash_profile của bạn, nó sẽ thiết lập $LC_NUMERIC cho tất cả vỏ bash bạn khởi động.

Tìm mã hiện có đặt $LC_NUMERIC trong .bashrc hoặc các tệp khởi động shell khác của bạn.

+0

Tuyệt vời, làm việc như một say mê! –

2

Bạn có thể gặp sự cố ngôn ngữ và không mong đợi một khoảng thời gian. Hãy thử:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9 
Các vấn đề liên quan