zshの文字列または配列リテラルにパラメータ拡張フラグを適用する

zshの文字列または配列リテラルにパラメータ拡張フラグを適用する

時々、zshの文字列または配列リテラルにパラメータ拡張フラグを適用したいと思うかもしれません。ユースケースの例として、$arglistコンマで区切られたいくつかの文字列をコンマで除算し、前に何かを追加したいとします。次のようにできればいいでしょう。

${(s/,/)arg1,arg2,$restofarglist}

もちろん、この特定の問題を解決する別の方法があり、常にパラメータに最初に割り当ててからフラグを適用できることを知っています。しかし、問題は、ロゴをテキストに直接適用できるかどうかです。

ベストアンサー1

私はあなたがパラメータ置換を探していると思います:-

$ restofarglist='abc,def'
$ echo ${(s/,/)${:-arg1,arg2,$restofarglist}}
arg1 arg2 abc def

man zshから:

${name:-word}
              If name is set, or in the second form is non-null, then substitute its value;
              otherwise substitute word.  In the second form name may be omitted, in  which
              case word is always substituted.

実際、この例を短くすることができます。

$ echo ${${:-arg1,arg2,$restofarglist}//,/ }
arg1 arg2 abc def

おすすめ記事