direkte Übergabe eines Strings mit $
anecho
$ echo $'#include <iostream>\nint main() {\n std::cout << \"Hello World!\" << std::endl;\n}'
erweitert die eingebetteten ANSI-Escapesequenzen
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
}
Ich habe den String einer Variablen zugewiesen
codeStr='#include <iostream>\nint main() {\n std::cout << \"Hello World!\" << std::endl;\n}'
und dann die Variable echoen
echo $codeStr
Ich habe die Rohzeichenfolge und keinen formatierten Text erhalten.
Wie erhalte ich den formatierten Text, als würde ich einen String direkt übergeben?
Antwort1
Verwenden-e
wechseln zuenable 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;
}
Das Adressieren des Kommentars @steeldriver printf
funktioniert auch (und interpretiert die Sequenz korrekt).
$ 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;
}