Shell 文件输入重定向中的Unix读取命令行为
假设我有一个包含可用内容的文件Shell 文件输入重定向中的Unix读取命令行为,shell,unix,Shell,Unix,假设我有一个包含可用内容的文件 cat file | read; echo $REPLY 给出空输出 read < file; echo $REPLY 读取
cat file | read; echo $REPLY
给出空输出
read < file; echo $REPLY
读取
给出文件的第一行作为结果
while IFS= read; do :; done < file; echo $REPLY
而IFS=读取;do:;完成<文件;回音$回复
不打印任何内容,输出为空。在这里,我希望文件的最后一行作为输出,因为我认为迭代将一直进行到文件结束,最后一行将保留在REPLY变量中。这种行为有什么原因吗
while IFS= read; do :; done < file; echo $REPLY
这是一条管道。这意味着read
在子shell中。因此,它创建的shell变量不会继续存在
如果您的目标是将文件的最后一行放入变量中,那么有一些选项。例如:
reply="$(tail -n1 file)" ; echo $reply
或者
(在sed语言中,
$
表示文件的最后一行,p
表示打印。因此,$p
表示打印文件的最后一行。)如果要使用while循环在REPLY
变量中保留文件的最后一行,请使用以下命令:
REPLY=
while read -r line; do
REPLY="$line"
done < file
echo "REPLY=$REPLY"
回复=
而read-r行;做
答复:“$line”
完成<文件
echo“REPLY=$REPLY”
reply="$(tail -n1 file)" ; echo $reply
reply="$(sed -n '$p' file )" ; echo $reply
REPLY=
while read -r line; do
REPLY="$line"
done < file
echo "REPLY=$REPLY"