С -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:]]#}