我需要什么:
假设我有两个命令A
和B
,每个命令都返回一个单行字符串(即一个没有换行符的字符串,最后可能只有1)。我需要一个命令(或管道命令序列)C
,它在同一行连接命令A
和B
的输出,并在它们之间插入1个空格字符。
如何运作的示例:
例如,假设命令A
的输出是之间的字符串:
"The quick"
假设命令B
的输出是之间的字符串:
"brown fox"
然后我希望命令C
的输出是引号之间的字符串:
"The quick brown fox"
我最好的尝试解决方案:
在尝试自己弄清楚C
时,管道命令的后续序列似乎应该有效:
{ echo "The quick" ; echo "brown fox" ; } | xargs -I{} echo {} | sed 's/\n//'
不幸的是,这个命令的输出是
The quick
brown fox
答案 0 :(得分:53)
您可以使用tr
:
{ echo "The quick"; echo "brown fox"; } | tr "\n" " "
或使用sed:
{ echo "The quick"; echo "brown fox"; } | sed ':a;N;s/\n/ /;ba'
The quick brown fox
答案 1 :(得分:32)
echo "$(A)" "$(B)"
假设A
和B
都不输出多行,应该有效。
$ echo "$(echo "The quick")" "$(echo "brown fox")"
The quick brown fox
答案 2 :(得分:5)
$ commandA () { echo "The quick"; }
$ commandB () { echo "brown fox"; }
$ x="$(commandA) $(commandB)"
$ echo "$x"
The quick brown fox
答案 3 :(得分:2)
我试着用另一个简单的例子解释解决方案
我们要连接以下命令的输出:
" PWD"和" ls"
echo "$(pwd)$(ls)";
输出:2个连接字符串
答案 4 :(得分:1)
$ { echo -n "The quick" ; echo -n " " ; echo "brown fox" ; }
The quick brown fox