Bashの組み込みコマンドを使用して '\n'を変数としてどのように読みますか?

Bashの組み込みコマンドを使用して '\n'を変数としてどのように読みますか?

read何らかの形で末尾の記号を変数\nに入れることはできません。いずれにせよ、他の文字がない場合は、1文字だけをエコーし​​て空白行が発生するのをREPLY防ぎたいと思います。\n一方:readecho

declare -l REPLY
read >&2 -r -N 1 -p "Acknowledged? (y):" REPLY
if [[ "$REPLY" != $'\n' ]]; then
  echo >&2
fi

私にとって考えられる解決策は、入力をread抑制することでした。-sただし、理想的には、ユーザーがプロンプトの後に入力した単一文字を表示できるはずです。

また、変数に文字を入れることもIFS= read -d''できません\n

どんなアイデアがありますか?

ベストアンサー1

FWIW、あなたのコードは私にとって効果的です。

$ echo | bash -c 'read -rN1; echo "$BASH_VERSION <$REPLY>"'
4.2.36(1)-release <
>

有効にすると-N設定は不要になり、IFSNLは最終的に$ REPLYに表示されます。 NULL は$REPLY単に NUL( <Ctrl-Space>)、EOF、またはエラーを意味します(どちらの場合も、終了ステータスはゼロではありません)。

おすすめ記事