簡體   English   中英

尾隨換行符從bash子shell中被截斷

[英]Trailing newlines get truncated from bash subshell

Bash似乎從子shell的輸出中刪除了結尾的換行符。 例如:

$ echo "Newline: '$(echo $'\n')'"

將產生輸出

Newline: ''

有誰知道解決方法或防止這種截斷發生的方法?

如果您只需要變量中的換行符:

nl=$'\n'

如果需要保留換行符,可以執行此操作(在自己的答案中顯示):

f () { echo "hello"; }
output=$(f; echo "x")
output=${output%x}
echo "'$output'"

導致:

'hello
'

經過更多的實驗后,我發現了使用shell變量的解決方法。 基本上,我確保輸出不會以換行符結尾,然后稍后將添加的文本剝離

output="$(echo $'\n'x )"
output="${output%x}"
echo "Newline: '$output'"

這給出了適當的輸出

Newline: '
'

您可以使用-e選項啟用反斜杠轉義的解釋,並通過一個echo完成所有操作。

$ echo -e "Newline: '\n'"

將產生輸出

Newline: '
'

暫無
暫無

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

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