将命令输出发送到变量时保留格式吗?

将命令输出发送到变量时保留格式吗?

我有一个 bash 脚本。如果我运行此命令:

  1. grep 某些模式,
  2. 变换输出,
  3. 对输出进行排序
  4. 对输出进行重复数据删除

然后我在终端中每行得到一个 grep find

LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq

但是,如果我将其放入输出变量中,则格式会丢失(在回显到文件或在屏幕上回显时)。

#!/usr/bin/env bash
output=$(LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq)
echo $output > $fn

将命令保存到变量后,如何保留该命令输出的格式?

答案1

使用引号:

echo "$output" > $fn

echo 行由 shell 解析(在变量扩展之后),并且参数之间的所有空格字符都被简化为一个简单的空格。例如:

$ var1="toto
> titi
> tutu
> "

$ echo $var1
toto titi tutu

$ echo "$var1"
toto
titi
tutu

相关内容