1. ホーム
  2. sh

[解決済み] shで文字列の中に改行を入れるにはどうしたらいいですか?

2022-03-22 02:20:42

質問

これは

STR="Hello\nWorld"
echo $STR

を出力として生成します。

Hello\nWorld

ではなく

Hello
World

文字列の中に改行がある場合はどうすればよいですか?

注意 この質問は エコー . 私が意識しているのは echo -e に引数として(改行を含む)文字列を渡すことができる解決策を探しています。 その他 を解釈するための同様のオプションがないコマンドを使用することができます。 \n を改行として扱います。

どのように解決するのですか?

Bashを使用している場合、解決策は $'string' 例えば

$ STR=$'Hello\nWorld'
$ echo "$STR" # quotes are required here!
Hello
World

他の多くのシェルを使っている場合は、文字列の中にそのまま改行を挿入してください。

$ STR='Hello
> World'

Bashはなかなかいい感じです。を受け付けるだけでなく \n の中に $'' という文字列があります。以下は、Bashのマニュアルページからの抜粋です。

Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by the
ANSI C standard. Backslash escape sequences, if present, are decoded
as follows:
      \a     alert (bell)
      \b     backspace
      \e
      \E     an escape character
      \f     form feed
      \n     new line
      \r     carriage return
      \t     horizontal tab
      \v     vertical tab
      \\     backslash
      \'     single quote
      \"     double quote
      \nnn   the eight-bit character whose value is the octal value
             nnn (one to three digits)
      \xHH   the eight-bit character whose value is the hexadecimal
             value HH (one or two hex digits)
      \cx    a control-x character

The expanded result is single-quoted, as if the dollar sign had not
been present.

A double-quoted string preceded by a dollar sign ($"string") will cause
the string to be translated according to the current locale. If the
current locale is C or POSIX, the dollar sign is ignored. If the
string is translated and replaced, the replacement is double-quoted.