2017-12-06 14 views
4

私はUNIXのbashスクリプトにはかなり新しく、これが可能かどうかを知る必要があります。私は、ユーザーに複数回入力を求め、その入力を1つの変数に格納したいと考えています。Bashの1つの変数に複数のユーザー入力を追加する

userinputs= #nothing at the start 

read string 
<code to add $string to $userinputs> 
read string 
<code to add $string to $userinputs> #this should add this input along with the other input 

ユーザーが最初に尋ねられたとき、それは$ userinputs

での「ABC」を追加「ABC」を入力した場合、入力のために再度尋ね、ユーザーが「123」を入力したときにそう、スクリプトを保存する必要がありますそれ同じ$ userinputs

では、これは$のユーザ入力= ABC123

答えて

4

バッシュで2つの文字列をCONCATする通常の方法は次のとおりです。

new_string="${string1}literal$string2" 

new_string="$string1$string2" 

{}たちは変数の展開を妨害することができます文字列リテラルを持っている場合にのみ、変数名を中心に必要とされていますむしろ

new_string="$string1literal$string2" 

+=オペレータ:

userinputs= 
read string 
userinputs+="$string" 
read string 
userinputs+="$string" 

ダブル$stringを引用すると、この場合にはオプションです。


参照:

+0

私は、彼らが*、すべてのユーザー入力のように特定の文字を入力するまで、ユーザーの入力を求め続けるために、whileループでこれを使用することができます1つの変数に保存されますか? –

+0

はい、@ M.Azeem、そうすることができます。 – codeforester

0

になるだろうあなたは、変数をconcatentateなどのようなものと同じで複数の文字列を格納することができる:

foo=abc 
echo $foo # prints 'abc' 
bar=123 
foo="${foo}${bar}" 
echo $foo # prints 'abc123' 

変数に代入するときは、他の変数、または同じ変数を使用することができ、例えばa="${a}123${b}"。詳細はthis questionを参照してください。

あなたが割り当てようとしている文字列を引用する必要はなく、${var}の構文を使用することもできますが、引用するときと引用しないときは驚くほど微妙な芸術なので、二重引用符で囲まれた"${var}"の構文は、通常最も安全な方法です(これらのリンクのいずれかを知りたければ、123)。

とにかく

、あなたは($REPLYに読み込み、デフォルトでは、読んで)一時変数に読み込む必要がありますので、同じように、あなたの主な変数にそのをconcatentate:

allinput= 
read # captures user input into $REPLY 
allinput="${REPLY}" 
read 
allinput="${allinput}${REPLY}" 

readコマンドは非常に異なる応じて動作することに注意してください特に特別な文字を使って普通に入力された場合でも、グローバル変数IFSの値を指定してください。一般的な "ちょうど私が意味すること"の選択は、IFS=でIFSを空にして、入力をキャプチャするのにread -rを使用することです。詳細は、read builtin documentationを参照してください。

関連する問題