Je suis nouveau dans les scripts Shell. J'ai une variable dans un script shell dans laquelle j'aimerais formater les données. La variable stocke les nouvelles données à chaque itération d'une boucle. Chaque fois que les nouvelles données sont stockées, j'aimerais insérer un nouveau caractère de ligne. Voici comment j'essaie de stocker les données dans la variable.
VARIABLE="$VARIABLE '\n' SomeData"
Malheureusement, la sortie inclut le '\n'
littéral. Toute aide serait la bienvenue. Merci d'avance.
Essayez $'\n'
:
VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"
donne moi
a
b
Une technique courante est:
nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"
echo "$VARIABLE"
PreviousData
SomeData
VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR
un.
.deux
Autre que $'\n'
, vous pouvez utiliser printf
également comme ceci:
VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"
SORTIE:
Foo Bar
SomeData
C'est beaucoup plus simple que vous ne le pensez:
VARIABLE="$VARIABLE
SomeData"
Guillemet simple Tous les caractères spéciaux entre ces guillemets perdent leur sens spécial.
https://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
Donc, la syntaxe que vous utilisez fait quelque chose de différent que vous voulez réaliser.
Voici ce dont vous avez besoin:
La construction $ '\ X' rend l'option -e in echo inutile .
https://linux.die.net/abs-guide/escapingsection.html
echo -e "something\nsomething"
ou
echo "something"$'\n'"something"
J'ai eu un problème avec toutes les autres solutions: en utilisant un #
suivi de SPACE
(assez courant lors de l'écriture dans Markdown), les deux se sépareraient sur une nouvelle ligne.
Donc, une autre façon de faire consisterait à utiliser des guillemets simples pour que le "\ n" soit rendu.
FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"
echo "$FOOBAR"
Sortie:
# Markdown Title #
Be *brave* and **bold**.
En me basant sur les deux premières solutions, j'aimerais voir ce qui suit. La concaténation de chaînes avec l'opérateur '+ =' me semble plus claire.
N'oubliez pas non plus d'utiliser printf plutôt que d'écho, vous éviterez tant de problèmes
sometext="This is the first line"
sometext+=$'\n\n'
sometext+="This is the second line AFTER the inserted new lines"
printf '%s' "${sometext}"
Les sorties:
C'est la première ligne
Ceci est la troisième ligne APRÈS la nouvelle ligne insérée