184 votes

Comment supprimer un saut de ligne d'une chaîne en Bash

J'ai la variable suivante.

echo "|$COMMAND|"

qui renvoie

|
REBOOT|

Comment puis-je supprimer ce premier saut de ligne ?

10voto

Prachi Points 311

Ce qui a fonctionné pour moi était echo $testVar | tr "\n" " "

Où testVar contenait ma variable/résultat-de-script

6voto

Ingo Baab Points 346

Utilisez ce bashism si vous ne voulez pas créer de processus comme (tr, sed ou awk) pour une tâche aussi simple. Bash peut le faire seul:

COMMANDE=${COMMANDE//$'\n'/}

De la documentation:

${FOO//from/to} Remplacer tout
${FOO/from/to}  Remplacer la première correspondance

5voto

zerotool Points 475

Si vous utilisez bash avec l'option extglob activée, vous pouvez supprimer uniquement les espaces vides en fin de ligne via :

shopt -s extglob
COMMAND=$'\nRE BOOT\r   \n'
echo "|${COMMAND%%*([$'\t\r\n '])}|"

Cela produit :

|
RE BOOT|

Ou remplacez %% par ## pour remplacer uniquement les espaces vides en début de ligne.

5voto

Paulo Points 1201

Vous pouvez simplement utiliser echo -n "|$COMMANDE|".

$ man echo

-n ne pas afficher le saut de ligne final

2voto

conmak Points 396

Pour résoudre l'une des causes potentielles du problème réel, il est possible que vous utilisiez un fichier crlf.

Exemple de CRLF :

.env (crlf)

VARIABLE_A="abc"
VARIABLE_B="def"

run.sh

#!/bin/bash
source .env
echo "$VARIABLE_A"
echo "$VARIABLE_B"
echo "$VARIABLE_A $VARIABLE_B"

Renvoie :

abc
def
 def

Cependant, si vous convertissez en LF :

.env (lf)

VARIABLE_A="abc"
VARIABLE_B="def"

run.sh

#!/bin/bash
source .env
echo "$VARIABLE_A"
echo "$VARIABLE_B"
echo "$VARIABLE_A $VARIABLE_B"

Renvoie :

abc
def
abc def

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X