Bash:Can Here Strings<<<使用多个变量作为输入?

时间:2016-05-31 16:21:30

标签: arrays bash unix sh

我正在尝试使用多个变量初始化一个数组,如下所示。

StringOne="This is a Test String"
StringTwo="This is a New String"
read -r -a Values <<< "$StringOne" "$StringTwo"

但似乎数组只从第一个变量.ie StringOne

获取值
 $ echo ${Values[0]}
 This
 $ echo ${Values[1]}
 is
 $ echo ${Values[2]}
 a
 $ echo ${Values[3]}
 Test
 ${Values[4]}
 String
 $ echo ${Values[5]}

 $ echo ${Values[6]}

 $

这种为数组初始化传递变量值的方法有什么问题?我们不能用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;运营商?

2 个答案:

答案 0 :(得分:2)

  

这种为数组初始化传递变量值的方法有什么问题?我们不能用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;运营商?

是和否。 <<<运算符将一个shell单词作为其操作数,正如其文档中非常清楚地呈现的那样。但是,您可以通过适当使用引号将多个变量的值组合在一个shell单词中:

StringOne="This is a Test String"
StringTwo="This is a New String"
read -r -a Values <<< "$StringOne $StringTwo"
echo "${Values[@]}"

输出:

  

这是一个测试字符串这是一个新字符串

答案 1 :(得分:0)

使用:

read -r -a Values <<< "$StringOne"" ""$StringTwo"

或者:

read -r -a Values <<< "$StringOne"' '"$StringTwo"

或者:

out="$StringOne $StringTwo"
read -r -a Values <<< "$out"

或者关于这个主题的其他变体。

这是有效的,因为通过<<<发送的字符串是扩展右侧内容的结果。我们可以通过连接它们使两个变量充当一个长字符串。