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
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'
The quick brown fox
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
$ commandA () { echo "The quick"; }
$ commandB () { echo "brown fox"; }
$ x="$(commandA) $(commandB)"
$ echo "$x"
The quick brown fox
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