を使用すると-I
、xargs
単語なしの-I
(および空白で区切られた、引用符で囲まれている可能性がある)ワードごとのデフォルトの引数とは対照的に、行ごとに1つの引数を取得します(およびを意味します-n
)。したがって、あなたの例でdate
は、最後の改行を除いた(1行にある)の{}
出力全体に展開されて1回だけ呼び出され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:]]#}