如何将由换行符分隔的字符串文件转换为数组

如何将由换行符分隔的字符串文件转换为数组

我有一个包含如下数据的文件:

UserName
UserName
UserName

每条数据由换行符分隔。

我需要将该数据转换为字符串数组并存储在变量中。

如何仅通过 bash 或 shell 执行来实现此目的?

答案1

mapfile

$ mapfile -t array < yourfile

$ declare -p array # print array content
  declare -a array=([0]="UserName" [1]="UserName" [2]="UserName")

答案2

$ set -f             # disable globbing
$ arr=($(<file.csv))
$ set +f             # enable globbing
$ declare -p arr     # print array content
declare -a arr=([0]="UserName" [1]="UserName" [2]="UserName")
  • arr=(…)创建数组
  • $(<file.csv)读取文件file.csv(如$(cat file.csv)

*在读取文件之前,应禁用通配符以防止使用诸如或或特殊模式之类的字符扩展用户名?(路径名扩展)。

元素在换行符、空格或制表符处分割(假设$IFS尚未修改)并进行修剪。

答案3

i=0
while IFS= read -r line
do
  var[i++]="$line"
done < filename

这里 var 数组变量存储所有名称。并且可以通过以下方式访问

printf '%s\n' "${var[0]}"
printf '%s\n' "${var[1]}"
...
...

相关内容