Sono nuovo dello scripting di Shell. Ho una variabile in uno script di shell in cui mi piacerebbe formattare i dati. La variabile memorizza nuovi dati durante ogni iterazione di un ciclo. Ogni volta che i nuovi dati vengono archiviati, vorrei inserire un nuovo carattere di linea. Ecco come sto cercando di memorizzare i dati nella variabile.
VARIABLE="$VARIABLE '\n' SomeData"
Sfortunatamente, l'output include il letterale '\n'
Qualsiasi aiuto sarebbe apprezzato. Grazie in anticipo.
Prova $'\n'
:
VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"
mi da
a
b
Una tecnica comune è:
nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"
echo "$VARIABLE"
PreviousData
SomeData
VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR
uno.
.Due
Oltre a $'\n'
puoi usare printf
anche in questo modo:
VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"
PRODUZIONE:
Foo Bar
SomeData
È molto più semplice di quanto pensi:
VARIABLE="$VARIABLE
SomeData"
Citazione singola Tutti i caratteri speciali tra queste virgolette perdono il loro significato speciale.
https://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
Quindi la sintassi che usi fa qualcosa di diverso che vuoi raggiungere.
Questo è quello di cui hai bisogno:
Il costrutto $ '\ X' rende l'opzione -e in echo inutile .
https://linux.die.net/abs-guide/escapingsection.html
echo -e "something\nsomething"
o
echo "something"$'\n'"something"
Ho avuto un problema con tutte le altre soluzioni: quando usavo un #
seguito da SPACE
(abbastanza comune quando scrivevo in Markdown) entrambi venivano divisi in una nuova riga.
Quindi, un altro modo per farlo coinvolgerebbe le virgolette singole in modo che "\ n" venga visualizzato.
FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"
echo "$FOOBAR"
Produzione:
# Markdown Title #
Be *brave* and **bold**.
Basandomi sulle prime due soluzioni, farei come mostrato di seguito. Concatenare le stringhe con l'operatore '+ =', in qualche modo mi sembra più chiaro.
Ricorda anche di usare printf anziché eco, ti risparmierai così tanti problemi
sometext="This is the first line"
sometext+=$'\n\n'
sometext+="This is the second line AFTER the inserted new lines"
printf '%s' "${sometext}"
Uscite:
Questa è la prima linea
Questa è la terza riga DOPO la nuova riga inserita