web-dev-qa-db-ja.com

UNIXシェル変数への改行文字の追加

シェルスクリプトは初めてです。データをフォーマットするシェルスクリプトに変数があります。変数は、ループの各反復中に新しいデータを保存します。新しいデータが保存されるたびに、改行文字を挿入したいと思います。これが、データを変数に保存する方法です。

VARIABLE="$VARIABLE '\n' SomeData"

残念ながら、出力にはリテラル'\n'が含まれています。どんなヘルプも感謝します。前もって感謝します。

32
James P.

$'\n'

VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"

私にくれます

a
b
57
vmpstr

一般的な手法は次のとおりです。

nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"

echo "$VARIABLE"
PreviousData
SomeData

また、一般的に、文字列が誤って改行で始まるのを防ぐために:

VARIABLE="$VARIABLE${VARIABLE:+$nl}SomeData"

(表現 ${VARIABLE:+$nl}は、VARIABLEが設定されていて空でない場合にのみ、改行に展開されます。

21
William Pursell
VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR

出力:

1。
。二

5
Alex

$'\n'以外に、printfを次のように使用できます。

VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"

出力:

Foo Bar
SomeData
3
anubhava

あなたが思っているよりもずっと簡単です:

VARIABLE="$VARIABLE
SomeData"
1
chepner

単一引用符これらの引用符の間のすべての特殊文字は、特別な意味を失います。
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"
1
user8175891

私は他のすべてのソリューションに問題がありました:#に続いてSPACE(Markdownで記述する場合は非常に一般的)の両方が新しい行に分割されます。

したがって、別の方法では、単一引用符を使用して「\ n」をレンダリングする必要があります。

FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"

echo "$FOOBAR"

出力:

# Markdown Title #
Be *brave* and **bold**.
1
patrick

最初の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行目です

0
Almendrico