2017-06-28 41 views
0

bash在以下示例中何時或如何刪除尾隨換行符?爲什麼bash刪除尾隨換行符

echo -n "$(echo foo)" | wc -C# why is this 3 not 4 

a="$(echo foo | tail -c 1)" # why is $a empty and not "\n" 

回答

0
  1. 回聲默認添加一個新的行字符的字符串。

例如,echo'foo'給出foo並在最後添加新的行字符。這就是爲什麼shell提示符(可能是$)出現在新行中的原因。

$echo 'foo' 
foo 
$ 

如果是用WC -c管道,它會給4作爲結果,因爲後新行字符也算作

$echo 'foo' | wc -c 
4 
$ 

如果-n選項與回波使用默認尾隨新行字符被抑制並且shell提示符出現在同一行中。 例如,

$echo -n 'foo' 
foo$ 

現在,如果字符數是通過WC -c計數,它給3,因爲沒有拖尾新行字符是否存在。

$echo -n 'foo' | wc -c 
3 

出於同樣的原因, echo -n "$(echo foo)" | wc -c當屬3而不是4,因爲-n抑制會如果沒有使用-n已經出現了新的行字符。 如果-n將被移除,您將得到4個答案。

  • a="$(echo foo | tail -c 1)" 正如我所看到的,echo $a給出了一個空的空行,然後將該殼提示符$,這意味着一個$後具有\ n的表示新的空行。
  • 這是預期的和完美的。

    如果沒有\ n是$ a,shell提示$會出現在連續行中,並且不會出現空行。