将文件的每一行赋值为一个变量



我希望通过stdin为文件的每一行分配一个特定的变量,该变量可用于引用该行,例如line1, line2

的例子:

cat Testfile
Sample 1 -line1
Sample 2 -line2
Sample 3 -line3

这样做是错误的,但正是您所要求的,使用离散变量:

while IFS= read -r line; do
    printf -v "line$(( ++i ))" '%s' "$line"
done <Testfile
echo "$line1" # to demonstrate use of array values
echo "$line2"

正确的方式,使用数组,对于bash 4.0或更新版本:

mapfile -t array <Testfile
echo "${array[0]}" # to demonstrate use of array values
echo "${array[1]}"

的正确方式,使用数组,对于bash 3.x:

declare -a array
while read -r; do
  array+=( "$REPLY" )
done <Testfile

请参阅BashFAQ #6了解更深入的讨论。

bash具有这样的内置功能。readarray从stdin(可以是你的文件)中读取行,并为它们分配数组的元素:

declare -a lines
readarray -t lines <Testfile

之后,您可以按编号引用行。第一行是"${lines[0]}",第二行是"${lines[1]}",等等

readarray需要bash版本4(2009年发布),或者更好的版本,并且可以在许多现代linux系统上使用。例如,Debian稳定版目前提供了bash 4.2,而RHEL6提供了4.1。Mac OSX仍然使用bash 3.x.

相关内容

  • 没有找到相关文章

最新更新