Làm cách nào để có được tên tháng hiện tại trong tập lệnh bash


9

Cú pháp để lấy tên tháng hiện tại (ví dụ jan hoặc feb) trong bashtập lệnh là gì?


6
Xem man datecho tất cả các tùy chọn định dạng.
airhuff

Câu trả lời:


22

Bạn có thể sử dụng date(1)lệnh.

Ví dụ:

date +%b

đầu ra là đặc thù địa phương. ví dụ: điều này sẽ trả về "1" nếu ngôn ngữ hệ thống của bạn được đặt thành tiếng Nhật, sử dụng currentmonthname=$(LANG=en_us_88591; date "+%B");để lấy tên tháng tiếng Anh
tính toán

@computingfreak, đúng hơn là như vậy currentmonthname=$(LC_ALL=C date +%B). Cách tiếp cận của bạn sẽ chỉ hoạt động nếu $LANGđã có trong môi trường và LC_ALLchưa được đặt và en_us_88591là một ngôn ngữ hiện có trên hệ thống của bạn với tên tháng tiếng Anh của Hoa Kỳ hoặc (nhiều khả năng) nó không tồn tại trong trường hợp đó sẽ mặc định là C / POSIX miền địa phương nơi tên tháng bằng tiếng Anh.
Stéphane Chazelas

10

Các strftime(3)tay ( man 3 strftime), nếu được cài đặt trên hệ thống của bạn, sẽ liệt kê tất cả các chuỗi định dạng có thể được sử dụng với các datetiện ích hoặc các %(...)Tchuỗi định dạng với printf. Hướng dẫn của datelệnh cũng có thể chứa các chuỗi định dạng được hỗ trợ.

Để sử dụng một trong số chúng, ví dụ %b("tên tháng viết tắt của miền địa phương.") Hoặc %B("tên tháng đầy đủ của miền địa phương"), bạn sử dụng +tùy chọn cho date:

$ date +%B
December

$ date +%b
Dec

$ date +'%B is abbreviated as "%b"'
December is abbreviated as "Dec"

Hoặc, với printf(trong ksh93hoặc bash4.3+):

$ printf '%(%B)T\n'
December

$ printf '%(%b)T\n'
Dec

$ printf '%(%B is abbreviated as "%b")T\n'
December is abbreviated as "Dec"

Để có được một tháng viết tắt bashthấp hơn (nếu ngôn ngữ của bạn không phải lúc nào cũng cung cấp tên chữ thường của tháng):

$ month=$( date +%b )
$ printf 'It is %s\n' "${month,,}"
It is dec

Việc mở rộng tham số ${parameter,,pattern}sẽ sửa đổi trường hợp của $parameterbất cứ nơi nào patternphù hợp. Trong ${m,,}, mô hình khớp với mọi nơi, vì vậy toàn bộ chuỗi trong $mđược đặt thấp hơn.

Hoặc như trong ksh, khai báo biến là chữ thường trước với:

typeset -l month

Với bash's printf, bạn có thể tự động chèn chuỗi được tạo ra trong một variable¹ vô hướng sử dụng -v:

$ printf -v month '%(%b)T'
$ printf 'It is %s\n' "${month,,}"
It is dec

Hoặc phần tử của khóa 0 của một mảng hoặc biến mảng kết hợp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.