在Bash中将多个用户输入添加到一个变量中

时间:2017-12-06 01:05:32

标签: linux bash unix

我是unix bash脚本的新手,需要知道这是否可行。我想多次询问用户输入,然后将输入存储到一个变量中。

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

所以如果用户输入&#34; abc&#34;当第一次被问到时,它会添加&#34; abc&#34;在$ userinputs

然后当再次询问输入时,用户输入&#34; 123&#34;脚本应该将它存储在相同的$ userinputs

这会使$ userinput = abc123

2 个答案:

答案 0 :(得分:4)

在Bash中连接两个字符串的常用方法是:

new_string="$string1$string2"
只有当我们有一个可以阻碍变量扩展的文字字符串时,才需要在变量名称周围

{}

new_string="${string1}literal$string2"

而不是

new_string="$string1literal$string2"

您还可以使用+=运算符:

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

在这种情况下,双引号$string是可选的。

另见:

答案 1 :(得分:1)

您可以连接变量并将多个字符串存储在同一个字符串中,如下所示:

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

分配给变量时,您可以使用其他变量或同一变量,例如a="${a}123${b}"。有关详细信息,请参阅this question

您不必引用您指定的字符串,或使用${var}语法,但学习何时引用而不引用是一种令人惊讶的细微差别的艺术,因此通常更安全抱歉,双引号中的"${var}"语法通常是最安全的方法(请参阅这些链接中的任何一个,超出您的想法:1 2 3

无论如何,你应该读入一个临时变量(读取,默认情况下读入$REPLY)并将其连接到主变量上,如下所示:

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

请注意read命令的行为会有很大差异,具体取决于提供的开关和IFS全局变量的值,尤其是面对带有特殊字符的异常输入时。一个常见的“只做我的意思”选择是通过IFS=清空IFS并使用read -r来捕获输入。有关详细信息,请参阅read builtin documentation