web-dev-qa-db-fra.com

Concaténer en bash la sortie de deux commandes sans caractère de nouvelle ligne

Ce dont j'ai besoin:

Supposons que j’ai deux commandes, A et B, chacune d’elles renvoyant une chaîne d’une seule ligne (c’est-à-dire une chaîne sans caractère de nouvelle ligne, sauf éventuellement 1 à la toute fin). J'ai besoin d'une commande (ou d'une séquence de commandes canalisées) C qui concatène la sortie des commandes A et B sur la même ligne et insère un caractère d'espacement entre elles.

Exemple de comment cela devrait fonctionner:

Par exemple, supposons que le résultat de la commande A soit la chaîne entre les guillemets ici:

"The quick"

Et supposons que la sortie de la commande B soit la chaîne entre les guillemets ici:

"brown fox"

Ensuite, je veux que la sortie de la commande (s) C soit la chaîne entre les guillemets ici:

"The quick brown fox"

Ma meilleure tentative de solution:

En essayant de comprendre C par moi-même, il semblait que la séquence suivante de commandes diffusées devrait fonctionner:

{ echo "The quick" ; echo "brown fox" ; } | xargs -I{} echo {} | sed 's/\n//'

Malheureusement, le résultat de cette commande est

The quick
brown fox
47
synaptik

Vous pouvez utiliser tr:

{ echo "The quick"; echo "brown fox"; } | tr "\n" " "

OU en utilisant sed:

{ echo "The quick"; echo "brown fox"; } | sed ':a;N;s/\n/ /;ba'

SORTIE:

The quick brown fox 
58
anubhava
echo "$(A)" "$(B)"

devrait fonctionner en supposant que ni A ni B ne génère plusieurs lignes.

$ echo "$(echo "The quick")" "$(echo "brown fox")"
The quick brown fox
33
Mat
$ commandA () { echo "The quick"; }
$ commandB () { echo "brown fox"; }
$ x="$(commandA) $(commandB)"
$ echo "$x"
The quick brown fox
5
chepner

Je vais essayer d'expliquer la solution avec un autre exemple simple

Nous devons concaténer le résultat de la commande suivante:
"pwd" et "ls"

echo "$(pwd)$(ls)";

Sortie: 2 chaînes concaténées

4
hemanto