シェルスクリプトは初めてです。データをフォーマットするシェルスクリプトに変数があります。変数は、ループの各反復中に新しいデータを保存します。新しいデータが保存されるたびに、改行文字を挿入したいと思います。これが、データを変数に保存する方法です。
VARIABLE="$VARIABLE '\n' SomeData"
残念ながら、出力にはリテラル'\n'
が含まれています。どんなヘルプも感謝します。前もって感謝します。
$'\n'
:
VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"
私にくれます
a
b
一般的な手法は次のとおりです。
nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"
echo "$VARIABLE"
PreviousData
SomeData
また、一般的に、文字列が誤って改行で始まるのを防ぐために:
VARIABLE="$VARIABLE${VARIABLE:+$nl}SomeData"
(表現 ${VARIABLE:+$nl}
は、VARIABLEが設定されていて空でない場合にのみ、改行に展開されます。
VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR
1。
。二
$'\n'
以外に、printf
を次のように使用できます。
VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"
出力:
Foo Bar
SomeData
あなたが思っているよりもずっと簡単です:
VARIABLE="$VARIABLE
SomeData"
単一引用符これらの引用符の間のすべての特殊文字は、特別な意味を失います。
https://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
したがって、使用する構文は、達成したいこととは異なる何かを行います。
これはあなたが必要とするものです:
$ '\ X'構造は、echoの-eオプションを不要にします。
https://linux.die.net/abs-guide/escapingsection.html
echo -e "something\nsomething"
または
echo "something"$'\n'"something"
私は他のすべてのソリューションに問題がありました:#
に続いてSPACE
(Markdownで記述する場合は非常に一般的)の両方が新しい行に分割されます。
したがって、別の方法では、単一引用符を使用して「\ n」をレンダリングする必要があります。
FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"
echo "$FOOBAR"
出力:
# Markdown Title #
Be *brave* and **bold**.
最初の2つのソリューションに基づいて、以下に示すようにします。 「+ =」演算子を使用して文字列を連結すると、どういうわけかより明確に見えます。
また、エコーとは対照的にprintfを使用することを忘れないでください。
sometext="This is the first line"
sometext+=$'\n\n'
sometext+="This is the second line AFTER the inserted new lines"
printf '%s' "${sometext}"
出力:
これが最初の行です
これは、挿入された新しい行の後の3行目です