Arrays Bash如何使用read命令将多个字分配给一个变量
我试图用read将多个单词/参数放入一个变量中。我尝试将其分配到一个数组中,并使用while循环将数组中的所有元素放入一个字符串中Arrays Bash如何使用read命令将多个字分配给一个变量,arrays,string,bash,Arrays,String,Bash,我试图用read将多个单词/参数放入一个变量中。我尝试将其分配到一个数组中,并使用while循环将数组中的所有元素放入一个字符串中 read -a info i=0 datastring="" while [ $i -lt ${info[@]} ] do datastring=$datastring${info[i]} done echo "$dataString" 当我运行程序时,它什么都不做,坐在那里,不会打印数据字
read -a info
i=0
datastring=""
while [ $i -lt ${info[@]} ]
do
datastring=$datastring${info[i]}
done
echo "$dataString"
当我运行程序时,它什么都不做,坐在那里,不会打印数据字符串,我有点迷失在任何其他方式上
read datastring <<<"this sentence contains multiple words"
echo "$datastring"
将使用$IFS的第一个字符作为分隔符,将数组连接成单个字。如果您想将单词全部涂抹在一起而不使用分隔符,可以执行以下操作:
datastring=""
for word in "${info[@]}"; do datastring+=$word; done
或者这个:
datastring=$(IFS=""; echo "${info[*]}")
datastring=${info[*]}
datastring=${datastring// /}
或者这个:
datastring=$(IFS=""; echo "${info[*]}")
datastring=${info[*]}
datastring=${datastring// /}
注意,所有引号和数组索引(*
vs@
)都经过仔细选择:请参见和
你想做什么?假设
info
是5,然后0<5
,出于某种原因,您不断将5连接到一个变量上无数次?您从不更新循环中的i
,而是希望将其与${info[@]}
进行比较。但是,如果你只是想把它压缩成一个字符串,那么为什么首先要把它读入数组呢?好吧,这应该是一段脚本,用来创建一个文件,排序应该是一行,里面有很多字段。命令行给出了文件名和类型。这是测试代码,看看这是否有效,但显然没有。我也不知道如何在每个论点之间留出一个空格。这就是重点。至于为什么我做得这么好,这对bash来说是一种新的体验,所以我正在努力学习如何做不同的事情。谢谢你,这帮了我很大的忙。