ඔබට මෙම ගොනුව ඇතැයි සිතමු:
$ cat /tmp/test.txt
Line 1
Line 2 has leading space
Line 3 followed by blank line
Line 5 (follows a blank line) and has trailing space
Line 6 has no ending CR
බොහෝ බාෂ් විසඳුම් කියවන ගොනු ප්රතිදානයේ අර්ථය වෙනස් කරන අංග හතරක් ඇත:
- හිස් පේළිය 4;
- පේළි දෙකක ඊයම් හෝ පසුපස අවකාශ;
- තනි රේඛාවල අර්ථය පවත්වා ගැනීම (එනම්, එක් එක් පේළිය වාර්තාවකි);
- 6 වන පේළිය CR සමඟ අවසන් නොවේ.
ඔබට සීආර් නොමැතිව හිස් රේඛා සහ අවසන් රේඛා ඇතුළුව පෙළ ගොනු රේඛාව අවශ්ය නම්, ඔබ ටික වේලාවක් භාවිතා කළ යුතු අතර අවසාන පේළිය සඳහා විකල්ප පරීක්ෂණයක් තිබිය යුතුය.
ගොනුව වෙනස් කළ හැකි ක්රම මෙන්න ( cat
ප්රතිලාභයට සාපේක්ෂව ):
1) අවසාන පේළිය සහ ප්රමුඛ හා පසුපස අවකාශය නැති කර ගන්න:
$ while read -r p; do printf "%s\n" "'$p'"; done </tmp/test.txt
'Line 1'
'Line 2 has leading space'
'Line 3 followed by blank line'
''
'Line 5 (follows a blank line) and has trailing space'
(ඔබ ඒ while IFS= read -r p; do printf "%s\n" "'$p'"; done </tmp/test.txt
වෙනුවට කරන්නේ නම් , ඔබ ප්රමුඛ හා පසුපස අවකාශයන් ආරක්ෂා කරයි, නමුත් CR සමඟ අවසන් නොවන්නේ නම් අවසාන පේළිය තවමත් අහිමි වේ)
2) cat
කැමැත්ත සමඟ ක්රියාවලි ආදේශනය භාවිතා කිරීමෙන් මුළු ගොනුවම එකවර කියවන අතර තනි රේඛාවල අර්ථය නැති වේ:
$ for p in "$(cat /tmp/test.txt)"; do printf "%s\n" "'$p'"; done
'Line 1
Line 2 has leading space
Line 3 followed by blank line
Line 5 (follows a blank line) and has trailing space
Line 6 has no ending CR'
(ඔබ විසින් ඉවත් නම් "
සිට $(cat /tmp/test.txt)
ඔබ ... ඒ වෙනුවට එක් ඔවුන්ගේ උගුරෙන් පහළට වඩා වචනය විසින් ගොනු වචනය කියවන්න. එසේම බොහෝ විට අදහස් දේ නොවේ)
ලිපිගොනු පේළියක් කියවා සියලු පරතරයන් ආරක්ෂා කර ගැනීම සඳහා වඩාත්ම ශක්තිමත් හා සරලම ක්රමය නම්:
$ while IFS= read -r line || [[ -n $line ]]; do printf "'%s'\n" "$line"; done </tmp/test.txt
'Line 1'
' Line 2 has leading space'
'Line 3 followed by blank line'
''
'Line 5 (follows a blank line) and has trailing space '
'Line 6 has no ending CR'
ඔබට ප්රමුඛ හා වෙළඳ අවකාශ ඉවත් කිරීමට අවශ්ය නම්, IFS=
කොටස ඉවත් කරන්න :
$ while read -r line || [[ -n $line ]]; do printf "'%s'\n" "$line"; done </tmp/test.txt
'Line 1'
'Line 2 has leading space'
'Line 3 followed by blank line'
''
'Line 5 (follows a blank line) and has trailing space'
'Line 6 has no ending CR'
(අ නිමාවන තොර පෙළ ගොනු \n
, තරමක පොදු වන අතර, POSIX යටතේ බිඳ සැලකේ. ඔබ අවර ගණන් කළ හැකි නම් \n
ඔබට අවශ්ය නොවේ || [[ -n $line ]]
තුළ while
පුඩුවක්.)
BASH FAQ හි තවත්