我想要为文件中的每一行分配一个特定的变量,通过stdin输入,以便可以引用该行,例如line1,line2。
示例:
示例:
cat Testfile
Sample 1 -line1
Sample 2 -line2
Sample 3 -line3
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
版本中的演示。 - jaypal singhreadarray
(以及它的同义词mapfile
)是最近才添加的,在像OS X和RHEL5/CentOS 5这样安装bash 3.x的系统上不可用。 - Charles Duffyreadarray -t lines < <(program_that_writes_to_stdout)
。 - Tzunghsing David Wong
line1
是一个建议的变量名,还是文件的一部分? - Charles Duffy