文字列を直接渡す場合と同じようにフォーマットされたテキストを取得するにはどうすればよいですか?

文字列を直接渡す場合と同じようにフォーマットされたテキストを取得するにはどうすればよいですか?

文字列を直接$渡すecho

$ echo $'#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'

埋め込まれたANSIエスケープシーケンスを拡張します

#include <iostream>
int main() {
  std::cout << "Hello World!" << std::endl;
}

文字列を変数に割り当てました

codeStr='#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'

そして変数をエコーする

echo $codeStr

フォーマットされたテキストではなく、生の文字列を取得しました。

文字列を直接渡す場合と同じようにフォーマットされたテキストを取得するにはどうすればよいですか?

答え1

使用-e切り替えるenable interpretation of backslash escapes

$ codeStr='#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'
$ echo -e $codeStr 
#include <iostream>
int main() {
 std::cout << \"Hello World!\" << std::endl;
}

@steeldriver コメントに対処することprintfも機能します (シーケンスを正しく解釈します)。

$ codeStr='#include <iostream>\nint main() {\n  std::cout << \"Hello World!\" << std::endl;\n}'
$ printf "$codeStr"
#include <iostream>
int main() {
  std::cout << "Hello World!" << std::endl;
}

関連情報