Bash

擷取變數中命令的輸出時如何保留換行符 (n)

  • March 19, 2019

作為一個簡單的例子,我有一堆原始碼文件。我想將“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 不會將空格(包括換行符)解釋為欄位分隔符。

引用自:https://unix.stackexchange.com/questions/248226