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行を読む構文は次のとおりです。
IFS= read -r line
、いいえread line
- パラメータ拡張はPOSIXシェルから引用する必要があります。
bash
。 - 最初のパラメータ
printf
は形式です。これには外部データがあってはいけません。
1これは、Cの一般的な拡張ではなく、echo
8進数シーケンスに先行する0()が必要な\0ooo
拡張\ooo
であり、形式パラメータでも認識されますprintf
。