Bash
擷取變數中命令的輸出時如何保留換行符 (n)
作為一個簡單的例子,我有一堆原始碼文件。我想將“head”命令輸出儲存到所有這些文件的變數中。
我試過:
output=$(head $file)
\n
但發生的事情是,在將輸出儲存到變數時,這會自動修剪所有字元。如何在不刪除
\n
字元的情況下按原樣儲存命令輸出?
這是“命令擴展”的已知缺陷
$(...)
或...
最後一個換行符被修剪。如果這是你的情況:
$ output="$(head -- "$file"; echo x)" ### capture the text with an x added. $ output="${output%?}" ### remove the last character (the x).
將修正輸出值。
output=$(head $file)
將嵌入的換行符保留在 的值中output
,並修剪所有尾隨換行符。這是您引用變數的方式,這會有所不同。
將變數引用放在雙引號內,例如:
echo "$output"
列印嵌入的換行符,但不列印被命令擴展刪除的尾隨換行符
$(...)
。這是有效的,因為 shell 只解釋美元符號、命令擴展(反引號和
$(...)
)以及雙引號內的反斜杠;在雙引號內時,shell 不會將空格(包括換行符)解釋為欄位分隔符。