bash
  • builtin
  • 2011-03-21 119 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 <<< "" 
    
    相关问题