将命令输出替换为另一个 bash 命令但同时保留换行符?

Substitute command output into another bash command but preserving newlines at the same time?

我想按以下形式调用 bash 命令:

command1 argv1 "$(command2 arg)"

带字幕的命令将是 command1 的第二个参数。 问题是 command2 的输出包含 "\n" 序列,不是真正的换行符而是 "\n" 序列,它们作为换行符输出。在命令一中保留换行符应该使用语法 $'\n'。但是我不能同时使用两者:

$'$(command2 arg)'

$($'command2 arg')

它们都不起作用。我应该怎么做才能使命令替换在这种情况下起作用?

如果您只想要 command2 输出的第一行,请使用:

command1 argv1 $(command2 arg | head -n1)

如果你想使用 command2 输出的每一行作为 command1 的参数,只是不要引用命令替换:

command1 argv1 $(command2 arg)

Bash 将使用不带换行符的输出,而是使用空格。例如:

$ seq 3
1
2
3
$ echo "$(seq 3)"
1
2
3
$ echo $(seq 3)
1 2 3