我是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
答案 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。