考慮我有內容可用文件中它Unix的讀命令的行爲在文件輸入重定向
cat file | read; echo $REPLY
給空輸出
read < file; echo $REPLY
給出了文件的第一行作爲結果
while IFS= read; do :; done < file; echo $REPLY
什麼都不打印,空輸出。我在這裏預期文件的最後一行作爲輸出,因爲我認爲迭代將發生到文件末尾,並且最後一行將保留在REPLY變量中。這種行爲的任何理由?
考慮我有內容可用文件中它Unix的讀命令的行爲在文件輸入重定向
cat file | read; echo $REPLY
給空輸出
read < file; echo $REPLY
給出了文件的第一行作爲結果
while IFS= read; do :; done < file; echo $REPLY
什麼都不打印,空輸出。我在這裏預期文件的最後一行作爲輸出,因爲我認爲迭代將發生到文件末尾,並且最後一行將保留在REPLY變量中。這種行爲的任何理由?
while IFS= read; do :; done < file; echo $REPLY
上面逐個讀取文件的每一行。在它讀取文件的最後一行之後,它會經歷循環,然後它會嘗試再次讀取。這是讀取的最後一次嘗試,它會生成文件結束條件和空的$ REPLY。
read < file; echo $REPLY
默認情況下,read
一次讀取一行。您只需要一條線,這就是$ REPLY中的內容。 (如果一個指定-d
選項read
,然後$ REPLY可以根據選擇的分隔符有它的整個文件。
cat file | read; echo $REPLY
這是一個管道,這意味着read
是在子shell。因此,殼它創建變量沒有生存
如果你的目標是讓該文件的最後一行到一個變量,有選擇,例如:。
reply="$(tail -n1 file)" ; echo $reply
或者,
reply="$(sed -n '$p' file)" ; echo $reply
(在sed發言,$
表示文件的最後一行,並p
表示打印。所以,$p
手段打印文件的最後一行)
如果你想使用while loop
使用這種從文件的最後一行保持REPLY
變量:
REPLY=
while read -r line; do
REPLY="$line"
done < file
echo "REPLY=$REPLY"