Answers:
POSIXly,
(IFS=';'; set -f; mkdir -- $(locale mon))
请注意,这是当前语言中的月份名称。LC_ALL=C locale mon
如果您想要英语,而不考虑用户的语言,请替换为。
使用zsh
,您还可以使用$langinfo
特殊的关联数组(在zsh/langinfo
模块中):
zmodload zsh/langinfo
eval mkdir -- '$langinfo[MON_'{1..12}']'
虽然
mkdir -- ${(s:;:)"$(locale mon)"}
会更短。在rc
/中es
,还有其他带有拆分运算符的shell,您可以在其中指定分隔符(而不是$IFS
像在Bourne这样的shell中那样通过全局设置):
mkdir -- ``';'{locale mon}
您可以使用GNU一个循环结构date
这需要+1 month
,+2 months
像输入:
i=1; while ((i<=12)); do mkdir "$(date -d "+$i month" '+%B')"; ((i++)); done
例:
$ i=1; while ((i<=12)); do date -d "+$i month" '+%B'; ((i++)); done
September
October
November
December
January
February
March
April
May
June
July
August
Python知道月份的所有名称:
mkdir $(python -c 'import calendar; print(" ".join(calendar.month_name))')
或者,我们可以直接使用python创建目录:
python -c 'import calendar,locale,os;locale.setlocale(locale.LC_ALL, "");[os.mkdir(m) for m in calendar.month_name if m]'
以上内容的核心是[os.mkdir(m) for m in calendar.month_name if m]
为中的每个月创建一个目录calendar.month_name
。如果任何目录已经存在,这将生成一条错误消息并退出。如果要避免这种情况,可以在调用之前测试目录是否存在mkdir
:
python -c 'import calendar,os;[os.mkdir(m) for m in calendar.month_name if m and not os.path.exists(m)]'
$ python -c 'import calendar,os;[os.mkdir(m) for m in calendar.month_name if m]'
$ ls
April December January June May October
August February July March November September
StéphaneChazelas指出,上面印刷了英文月份的名称。为了获得本地月份的名称,他建议:
python -c 'import calendar,locale,os;locale.setlocale(locale.LC_ALL, "");[os.mkdir(m) for m in calendar.month_name if m]'
locale mon
很上乘,已经拥有我的+1。)
使用语言环境并假设使用Linux(locale(1)
其他系统上的输出不同),并且bash(1)
:
#! /bin/sh
(
eval "$( locale -k -c LC_TIME | grep ^mon= )" || exit
IFS=\; months=($mon)
mkdir "${months[@]}"
)
months=($mon)
不是sh
语法。这ksh93
或bash
语法。