我希望通过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.