文字列を直接$
渡す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;
}