echo "my name is=`read` and am from `read`"
予想出力:
my name is=sudhir and am from india
値sudhir
とindia
入力が使用されます。
これを行う方法は、480の質問に適用するのが好きです。各質問に必要なユーザー入力の量がわかりません。助けてください。
答え1
read
デフォルトでは、入力から単語を読みます。変数に変換。
`cmd`
、古代形態の$(...)
捕獲出力コマンド。デフォルトでは、read
出力は生成されません。読みたい内容を入力したときに表示されるテキストread
は次のとおりです。エコread
端末装置の場合は1に出力されません。
一部のread
実装では、読み取った内容を出力できます。たとえば、zsh
組み込みread
関数は-e
orを使用してこれを実行できます-E
(後者は入力をエコーするだけでなく、変数に入力も保存します)。
だからzsh
:
echo "my name is=$(read -e) and am from $(read -e)"
移植可能には入力行を読むことができます(代わりに特別な読書行動read
)それを再度出力しますhead -n1
。ただし、head
標準入力が端末デバイスまたは検索可能ファイルではない場合、ほとんどの実装は2行以上を読み取ります。
多くのシステムにはまだline
コマンドがあります(かつては標準でしたが、後で使用されなくなりました)。
echo "my name is=$(line) and am from $(line)"
一度に1バイトずつ読み取る必要があるため、1行以上の入力を読み取らないでください。
利用できない場合は、いつでも次の方法line
でシミュレートできますread
。
line() {
IFS= read -r line
ret=$?
printf '%s\n' "$line" || return "$ret"
}
またはそれを
prompt() {
printf >&2 %s "$1"
IFS= read -r answer
printf '%s\n' "$answer"
}
printf '%s\n' "my name is=$(
prompt "What is your name? ") and am from $(
prompt "Where are you from? ")"
(printf
代わりにここで使用されていますecho
echo
通常、任意のデータと一緒に使用することはできません。)。
(と同じzsh
)IFS= read -re '?What is your name? '
。
完全性のためにcsh
またはを使用して、tcsh
次のことを実行できます。
printf '%s\n' "my name is=$< and am from $<"
$<
入力を変数として読み取るcshの方法。
入力2行ごとに繰り返すには、次のテキスト処理ユーティリティを使用することをお勧めしますawk
。
awk '{name=$0; getline place; print "my name is="name" and am from "place}'
¹ inまたは設定を使用するか、inオプション(およびstdinはターミナルデバイス)を使用するread
など、直接行エディタを実装するように構成されていない場合の出力read -e
bash
emacs
gmacs
vi
ksh93
read
エコ標準出力ではなく標準エラーから。