ret*_*n 0 13 shell bash command-substitution newlines
作为一个简单的例子,我有一堆源代码文件。我想将“head”命令输出存储到所有这些文件的变量中。
我试过:
output=$(head $file)
Run Code Online (Sandbox Code Playgroud)
但发生的情况是,\n
在将输出存储到变量时,这会自动修剪所有字符。
如何在不删除\n
字符的情况下按原样存储命令输出?
Rob*_*rtL 10
output=$(head $file)
将嵌入的换行符保留在 的值中output
,并修剪所有尾随换行符。
这就是你如何引用产生差异的变量。
将变量引用放在双引号内,例如:
echo "$output"
Run Code Online (Sandbox Code Playgroud)
打印嵌入的换行符,但不打印由命令 expand 删除的尾随换行符$(...)
。
这是有效的,因为 shell 只解释美元符号、命令扩展(反引号和$(...)
)以及双引号内的反斜杠;在双引号内时,shell 不会将空格(包括换行符)解释为字段分隔符。
小智 10
这是“命令扩展”的一个已知缺陷,$(...)
或者`...`
最后一个换行符被修剪。
如果这是你的情况:
$ output="$(head -- "$file"; echo x)" ### capture the text with an x added.
$ output="${output%?}" ### remove the last character (the x).
Run Code Online (Sandbox Code Playgroud)
将更正输出值。