ユーザー入力から改行をキャプチャする方法

ユーザー入力から改行をキャプチャする方法

grep代わりに.likeに表示するユーザー入力で何かをしたいと思います。

uin="first\nsecond\n"
printf $uin | grep d

どの出力をsecondユーザーに入力したいですか?

read uin

ユーザーはこれを入力できます。これにより、上記の行で"first\nsecond\n"変数を使用できます。grepまたは、ユーザーが と をfirst入力した後に実際の戻り値を入力できる場合は、そのsecond内容がいっぱいになるので、\nそれも機能します。これはcliで実行することを意味します。ありがとうございます。

ベストアンサー1

次のことができます。

echo>&2 "Please enter a multiline string, Ctrl-D, twice if not on an empty line to end:"
input=$(cat)
printf 'You entered: <%s>\n'

末尾の改行は削除されるため、改行$(...)で終わるテキストを入力するために使用することはできません。

2行を読むには2回呼び出すだけですread

IFS= read -r first
IFS= read -r second
printf 'You entered: <%s\n%s>\n' "$first" "$second"

行を入力して展開するには\n、、、、 1...の順番\aに従います。\x45\0123

IFS= read -r line
expanded_line=$(printf %b "$line")
printf 'You entered: <%s>\n' "$expanded_line"

または、末尾の改行を削除したくない場合は、bash/zshまたは最新バージョンのksh93u + mを使用してください。

IFS= read -r line
printf -v expanded_line %b "$line"
printf 'You entered: <%s>\n' "$expanded_line"

いずれにせよ


1これは、Cの一般的な拡張ではなく、echo8進数シーケンスに先行する0()が必要な\0ooo拡張\oooであり、形式パラメータでも認識されますprintf

おすすめ記事