zshのstdinからn文字を読み取るには?

zshのstdinからn文字を読み取るには?

Bashでは、パイプから3つの文字を読み取るには、次のようにします。

... | read -n3

存在するジッシュread、最も近いオプションは次のとおりです-k

-k[シリアル番号]
1つだけ読んでください(またはシリアル番号)数値。すべて最初に割り当てられました 名前、噴射は必要ありません。このフラグは-q存在する場合は無視されます。-uまたはいずれかがない場合は、端末から入力を読み込みます-p。このオプションは zle ウィジェットでも使用できます。

MULTIBYTEニーモニック「キー」にもかかわらず、このオプションは文字全体を読み込み、オプションが設定されている場合は複数のバイトを含めることができます。

そして-u-p

-u N
ファイル記述子から入力を読むN

-p
入力はコプロセスで読み取られます。

Nakedがecho foobar | (read -k3; echo $REPLY)入力を待っています。-pdisplayでは失敗します read: -p: no coprocess。次のように動作します。

echo foobar | (read -k3 -u0; echo $REPLY)

bashよりzshで実装するのが難しいのを見たのは今回が初めてです。

標準入力(何でも)からN文字を読むよりも簡単な方法はありますか?

答え1

少し変ですが、本当です。録音された:

-k[シリアル番号]

-u(…)またはいずれかがない場合は、端末から入力を読み込みます-p

最初の試みが中断される理由は、端末で読んでいるからです。ブロックを解除するには、端末に3文字を入力してください。完全な行ではなく、限られた数の文字を要求するとき(-kまたは使用-q)、標準入力から読み取るには-u 0明示的に渡す必要があります。

echo foobar | ( read -u 0 -k 3; echo $REPLY )

答え2

サブシェルなしで動作します。

% echo foobar | read -k3 -u0; echo $REPLY
foo
% echo $ZSH_VERSION
5.5.1

関連情報