簡體   English   中英

如何正確打印bash中的讀取行

[英]How to correctly print read lines in bash

嘗試遍歷純文本文件時,我的行為很奇怪:

#!/bin/bash
sed -n "5,5p" test.tmp
while read linea in
do 
    echo $linea
done < test.tmp

事情是,從第一個sed我得到了我期望的結果,但是從while循環中我沒有得到:

./test.sh 
 (5) Sorgo                                              DICOTILEDONEAS                               1,5-2 l/ha          15
(1)
(2)
(3)
(4)
(5)
(6)

我同時附上兩個文件,以幫助澄清此處發生的情況:

提前致謝

我會怎么做:

#!/bin/bash

while IFS= read -r linea; do 
    printf '%s\n' "$linea"
done < <(sed -n "5,5p" test.tmp)

< <( )是進程替換,請檢查
http://mywiki.wooledge.org/ProcessSubstitution
http://wiki.bash-hackers.org/syntax/expansion/proc_subst


“雙引號”是每個包含空格/元字符和每個擴展名的文字: "$var""$(command "$var")""${array[@]}""a & b" 使用'single quotes'表示代碼或使用$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"' 看到
http://mywiki.wooledge.org/語錄
http://mywiki.wooledge.org/參數
http://wiki.bash-hackers.org/syntax/words

我終於發現發生了什么事。 while語句中有一個額外的“ in”。 大概我混合了兩種不同的時間。

我在哪里:

而在讀取linea時做回聲$ linea done <test.tmp

它應顯示為:

在閱讀linea時; ##已刪除,且; 添加做回聲$ linea完成<test.tmp

再次感謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM