(POSIX)シェル変数に改行を正しく保存するには? [コピー]

(POSIX)シェル変数に改行を正しく保存するには? [コピー]

修正する詳細を明確にするために例を使用し、次のシェルコマンドを実行してみてください。

SHELLVARIABLE="1st line,
2nd line,
3rd line,
" 
printf '%s' "$SHELLVARIABLE"

次の出力を生成します。

1st line,<newline>2nd line,<newline>3rd line,<newline>

<newline>役割は0x0a/ですか\n

元の問題の説明

正しい(POSIXチェック)保存方法は何ですか?新しいチーム文字0x0a(commen cスタイルescapとも呼ばれる\n)はシェル変数に変換されます。

私は確実にしたいと思います:

SHELLVARIABLE="
"

はい、それは単なる偶然ではなく、実際に正しいアプローチです。

POSIX以降印刷機能printf '\n'改行文字(例えば、または)を完全に生成できます。printf '%b' '\0012'まず、より明示的な(?または正しい?)形式を試しました。

SHELLVARIABLE="$(printf '\n')"

これは誘惑的なアプローチですが、いいえ働くによると基準、コマンドの置き換え(たとえば、$()および経由` `)を削除する必要があります。

1つ以上の順序新しいチーム交換が終わったらsです。

注:単一の末尾の改行文字をシェル変数に格納する必要があるという要件は、より一般的なユースケース(回答を求める)を抽象化することです。これは、次に始まるPOSIXシェル変数に文字列を格納する方法です。新しいチーム特徴。

ベストアンサー1

引用符付き文字列にハード改行文字を使用してもかまいません。

個人的に私は改行文字が必要な場合はそれを避けたいと思います。奇妙に見え、誤って最初の行の末尾に余分なスペースを入れる危険が少しあります(たとえば<space><newline>)。しかし、それは私です。

コマンド置換が削除されます。続く改行文字ですが、これだけ可能です。回避策は、最後の文字が改行文字でないことを確認してから、その文字を削除することです。

どちらも改行文字を提供する必要があります。

nl1='
'

nl2="$(printf '\nx')"
nl2="${nl2%x}"

おすすめ記事