我从文本文件中导入了纬度和经度。这两个文本文件包含几千个数字。我将它们读入变量,现在我想知道这些文件中有多少个数字。我使用了这个问题:验证变量的长度,但由于某种原因,我得到的输出是length of Lat is 1
.
#!/bin/sh
mapfile Latitude < final_ADCP_Saved.matLatitude.txt
mapfile Longitude < final_ADCP_Saved.matLongitude.txt
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"
如果我说echo "$Longitude
输出是
3.4269394e+00 3.4240913e+00 3.4212670e+00 3.4184430e+00 3.4156012e+00 3.4126834e+00 3.4097271e+00 3.4069235e+00 3.4041572e+00 3.4010903e+00 3.3982218e+00 3.3953517e+00 3.3925018e+00 3.3897342e+00 3.3868243e+00 3.3839234e+00 3.3810560e+00
如何确定这些变量的长度?
值之间没有换行符。因此,您需要通过以下方式指定分隔符
-d
:这现在应该正确地将每个纬度/经度放入其自己的数组元素中。
编辑:该
-d
选项似乎是现代的bashism。解决此问题的另一种方法似乎是tr
将空格转换为换行符(并用于-s
挤出重复项):不幸的是,这不起作用,因为管道导致
mapfile
在子 shell 中运行,因此该变量在主 shell 中不可用。解决方法是首先将 shell 的标准输入更改为进程替换,然后运行
mapfile
:请注意,我将第一行更改为,
#!/bin/bash
因为这仅适用于 bash。编辑2
现在想想,这
exec
部分不需要单独做: