bash
  • builtin
  • 2011-03-21 93 views 1 likes 
    1

    爲什麼read與管道相同的輸入和一個定界符表現不同:爲什麼「閱讀」的行爲與相同的輸入不同?

    printf "" | while read line; do echo "line=$line"; done # outputs nothing  
    while read line; do echo "line=$line"; done <<< ""  # outputs 'line=' 
    

    我怎樣才能在第二種情況下禁用輸出?

    +0

    我不熟悉''<<<運營商,這是什麼呢? – Jonathan 2011-03-21 15:16:06

    +0

    如果您使用'echo'或'printf'\ n「'而不是printf,則第一條語句在第二條語句中的結果相同。 – sudocode 2011-03-21 15:17:15

    +0

    這是一個「這裏的字符串」,就像它一樣。作爲here文檔處理的字符串。 – geekosaur 2011-03-21 15:18:04

    回答

    1

    如何使用$'\c'

    man bash | less -p '\\c * suppress trailing newline' 
    
    str="" 
    while read line; do echo "line=$line"; done <<<$'\c'"${str}" 
    
    str="abc" 
    while read line; do echo "line=$line"; done <<<$'\c'"${str}" 
    
    3

    這裏的文檔末尾有一個隱含的換行符(\n); printf ""什麼都不輸出。我不知道如何擺脫隱含的換行符。

    2

    如果你可以放棄所有的空行...

    while read line; do if test -n "$line"; then echo "line=$line"; fi; done <<< "" 
    
    相關問題