Linux 文件的行遍歷


#!/bin/bash

# 字符串拼接專題

name="Shell"
url="http://c.biancheng.net/shell/"

str1=$name$url  #中間不能有空格
str2="$name $url" #如果被雙引號包圍,那么中間可以有空格
str3=$name": "$url  #中間可以出現別的字符串
str4="$name: $url" #這樣寫也可以
str5="${name}Script: ${url}index.html"  #這個時候需要給變量名加上大括號

echo "==========方式一========="

context='start\n'
# 文件讀取方式一
cat '1.c' | while read line
do
    echo ${line}
    context="${context}${line}"
done

# 無法打印出文件中的任何內容
:<<!
使用的是管道符號,這使得while語句在子shell中執行,這意味着while語句內部設置的變量、數組、函數等在循環外部都不再生效。 例如:echo haha | a=5,在命令執行結束后,變量a的值也不再是5。
!

echo $context

echo "==========方式二========="

# 文件讀取方式二

while read line
do
    echo ${line}
    context="${context}${line}"'\n'
done < '1.c'

#成功給context賦值
echo -e $context

 

特別說明:

如果被讀的文件最后一行之后沒有換行符\n,則read讀取最后一行時遇到文件結束符EOF,循環即終止。

雖然,此時$line內存有最后一行,但程序已經沒有機會再處理此行內容

解決方案

while read line || [[ -n ${line} ]]

這樣當文件沒有到最后一行時不會測試-n $line,當遇到文件結束(最后一行)時,仍然可以通過測試$line是否有內容來進行繼續處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM