使用时-I
,xargs
每行获取一个自变量,而不是每个不带-I
(并暗示-n
)的单词(用空白或换行符分隔,可能用引号引起来)的默认值。因此,在您的示例中,date
仅调用一次,然后{}
扩展到的整个输出echo
(在一行中),减去尾随的换行符。
您可以在此处执行操作(请注意,这-d
是GNU扩展):
printf '%s\n' {1..12}/01 | xargs -I {} date -d {} +%b | xargs mkdir --
(请注意,它在月份名称缩写包含空格或引号字符的语言环境中无法正常工作;使用GNU xargs
,您可以使用来解决该问题xargs -d '\n' mkdir --
)
现在,要获取您的语言环境中月份缩写的列表,直接查询语言环境将更有意义:
(IFS=';'; set -o noglob; mkdir -- $(locale abmon))
(另请参阅locale -k LC_TIME
以查看LC_TIME
类别中的所有语言环境数据)。
或原生于zsh
:
zmodload zsh/langinfo
mkdir -- ${(v)langinfo[(I)ABMON_*]}
至少在GNU系统上,在某些语言环境中,月份缩写用空格填充为固定宽度:
$ LC_ALL=et_EE.UTF-8 locale title abmon
Estonian locale for Estonia
jaan ;veebr;märts;apr ;mai ;juuni;juuli;aug ;sept ;okt ;nov ;dets
$ LC_ALL=zh_TW.UTF-8 locale title abmon
Chinese locale for Taiwan R.O.C.
1月; 2月; 3月; 4月; 5月; 6月; 7月; 8月; 9月;10月;11月;12月
您可能要删除该填充。
前导空格将被删除xargs -I
,但尾部空格不会被删除。与zsh
:
zmodload zsh/langinfo
set -o extendedglob
mkdir -- ${${${(v)langinfo[(I)ABMON*]}##[[:space:]]#}%%[[:space:]]#}