将命令输出替换为另一个 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
我想按以下形式调用 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