Bash
讀取shell腳本中的文件沒有列印出任何東西?
我正在嘗試逐行從 shell 腳本中讀取文件。以下是我的文件內容 -
hello=world
下面是我編寫的 shell 腳本 -
#!/bin/bash while read -r line; do echo "$line" done < test.txt
但不知何故,每當我從我的 cygiwn 終端執行時,我都看不到控制台上列印出任何結果 -
我這樣執行 -
$ sh read.sh
它不會列印出任何東西。而且我不確定我在這裡做錯了什麼。
在 unix 世界中,換行符是行終止符,而不是行分隔符。文本文件由一系列行組成,每行都以換行符終止。這是一個換行字元(字元編號 10,可以表示為
LF
,^J
,\012
,\x0a
,\n
, …)。請參閱在文件末尾添加新行有什麼意義?特別是,每個非空文本文件都以換行符結尾。Windows 有時會以不同的方式工作:在某些應用程序中(但不是全部!Windows 不一致),CR LF 序列(輸入、換行、又名、、、、… )
^M^J
分隔行,因此以 CRLF 結尾的文件是以空行結尾的文件。因此,當您使用 Windows 編輯器編輯要在其他地方使用的文件時,請注意:\015\012``\x0d\x0a``\r\n
- 他們在換行符之前添加了這個額外的 CR 字元,一些 unix 應用程序(特別是 shell)將其視為普通字元,是行的一部分。
- 它們讓您相信最後一個換行符之後有一個空行,而最後一個換行符實際上終止了最後一行。
如果文件不為空且不以換行符結尾,則它不是格式良好的 unix 文本文件。一些應用程序通過忽略最後部分行或截斷它來做出反應。這就是這裡發生的事情:您將一個不完整的文本文件傳遞給 bash,它忽略了最後一個不完整的行。