我有一个包含空格分隔字符串的变量:
line="1 1.50 string"
我想把这个字符串用空格作为分隔符进行分割,并把结果存储在一个数组中,这样就可以:
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}
输出
1
1.50
string
在某个地方我找到了一个不起作用的解决方案:
arr=$(echo ${line})
如果我在这之后运行上面的echo语句,我会得到:
我也试
IFS=" "
arr=$(echo ${line})
结果是一样的有人能帮帮忙吗
6条答案
按热度按时间ztigrdn81#
为了将字符串转换为数组,从字符串创建一个数组,让字符串根据
IFS
(内部字段分隔符)变量自然分割,该变量默认为空格字符:或者使用herestring(
<<<
)运算符将字符串传递给read
命令的标准输入:对于第一个例子,在
$line
周围使用引号是至关重要的,因为这允许字符串被拆分为多个元素。标签:https://github.com/koalaman/shellcheck/wiki/SC2206
u5rb5r592#
In:
arr=( $line )
.“分裂”与“球”有关。通配符(
*
、?
和[]
)将扩展为匹配的文件名。正确的解决方案只是稍微复杂一点:
无结球问题;分割字符在
$IFS
中设置,变量用引号括起。e5nszbig3#
试试这个:
sh7euo9m4#
如果需要参数扩展,请尝试:
例如,以下面的代码为例。
如果当前目录包含文件
a.txt
、b.txt
和c.txt
,则执行代码将产生以下输出。m4pnthwp5#
另一种解决方案,但使用
readarray
:实际上,将输入存储在4个位置的数组中:
vybvopom6#