我希望通过stdin分配一个文件的每一行,一个特定的变量可用于引用该确切的行,例如line1,line2
示例:
cat Testfile
Sample 1 -line1
Sample 2 -line2
Sample 3 -line3
答案 0 :(得分:11)
使用离散变量执行此操作的错误方法,但正是您所要求的:
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。
答案 1 :(得分:3)
bash
有一个内置函数来做到这一点。 readarray
从stdin(可以是你的文件)读取行并为它们分配数组元素:
declare -a lines
readarray -t lines <Testfile
此后,您可以按编号参考行。第一行是"${lines[0]}"
,第二行是"${lines[1]}"
等等。
readarray
需要bash
版本4(released in 2009)或更好,并且在许多现代Linux系统上都可用。例如,Debian stable目前提供bash
4.2,而RHEL6提供4.1。不过,Mac OSX仍在使用bash
3.x。