zsh(および他のシェル)に次のパラメータを含めると、次のようになります。
{a,b,c}{d,e,f}
中括弧の拡張は次のように変更されます。
ad ae af bd be bf cd ce cf
私の目的では、引数の順序が重要です。左から右ではなく、右から左に拡張するには中かっこが必要です。つまり、次のように拡張したいと思います。
ad bd cd ae be ce af bf cf
複数の中かっこセットが拡張される順序を制御する方法はありますか?私はこれらの主張だけでなく、どんな状況でも動作することを探しています。
答え1
パラメータ拡張とガサイ拡張を組み合わせることができます。
% foo=(d e f)
$ echo {a,b,c}${^foo}
ad bd cd ae be ce af bf cf
別に定義したくない場合foo
(おそらく)、次のものを使用できます。
$ echo {a,b,c}${^:-d e f}
ad bd cd ae be ce af bf cf
このオプションを設定すると、この動作を有効にするための例の1つはrcexpandparam
必要ありません。^
(注:テスト中にオプションも設定しましたshwordsplit
。設定されていない場合は、たとえば、試してみてくださいecho {a,b,c}${^=:-d e f}
。ストーリーのレッスン:ほとんどすべてが可能ですzsh
が、オプションと構文の正しい組み合わせを使用する必要があります。)
答え2
あなたはzsh
使用することができます-C
指定された列数好きな主張print
:
print $(print -C3 {a,b,c}{d,e,f})
...得るために...
ad bd cd ae be ce af bf cf
...$IFS
以下を分割せずに:
print -C3 {a,b,c}{d,e,f}
...印刷...
ad bd cd
ae be ce
af bf cf
...しかし、あなたはできますまず交差してから転倒良い...
print -aC3 {a,b,c}{d,e,f}
ad ae af
bd be bf
cd ce cf
...または...
print $(print -aC2 {foo,bar}{bad,baz})
foobad foobaz barbad barbaz
答え3
2番目のグループの各要素の末尾に数字を入れてから、最後の文字を並べ替えることができます。
echo -e "\n"{a,b,c}{d1,e2,f3} | sort -k 1.3 | cut -c 1-2 | tr '\n' ' '
文字以外のフィールドを切り捨てるには、区切り文字(スペース)の後に数字を追加することをお勧めします。
echo -e "\n"{a,b,c}{"d 1","e 2","f 3"} | sort -k 2n | cut -f 1 -d ' ' -s | tr '\n' ' '
答え4
fish
シェルはデフォルトで次の動作を行います。fish
拡張は右から左にするので:
$ fish -c 'echo {a,b,c}{d,e,f}'
ad bd cd ae be ce af bf cf