Für die Leute, die hierher gekommen sind, indem sie auf das erste Suchergebnis geklickt haben, nachdem sie „bash printf escaped“ gegoogelt haben, ist die korrekte Verwendung von printf zum Generieren von Bash-escaped Text:
printf " %q" "here is" "a few\n" "tests"
Welche Ausgaben (ohne nachgestellten Zeilenumbruch):
here\ is a\ few\\n tests
Versuchen Sie es
printf "%s\n" "$string"
Siehe printf(1)
Sie können $' '
verwenden um die Zeilenumbrüche und Tabulatorzeichen einzuschließen, dann ein einfaches echo
genügt:
#!/bin/bash
get_lines() {
local string
string+='The path to K:\Users\ca, this is good'
string+=$'\n'
string+='The second line'
string+=$'\t'
string+='123'
string+=$'\n'
string+='It also has to be 100% nice than %99'
echo "$string"
}
get_lines
Ich habe auch ein paar andere kleinere Änderungen an Ihrem Skript vorgenommen. Neben der Kleinschreibung von FUNCTION_NAME habe ich auch die kompatiblere Funktionssyntax verwendet. In diesem Fall gibt es keinen großen Vorteil (da $' '
Strings sind ohnehin eine Bash-Erweiterung), aber es gibt keinen Grund, die function func()
zu verwenden Syntax soweit ich weiß. Auch der Geltungsbereich von string
kann auch lokal für die Funktion sein, in der es verwendet wird, also habe ich das auch geändert.
Ausgabe:
The path to K:\Users\ca, this is good
The second line 123
It also has to be 100% nice than %99
Darf ich anmerken, dass "man printf" deutlich zeigt, dass ein "%"-Zeichen durch ein weiteres "%" maskiert werden muss, so dass printf "%%" ein einzelnes "%" ergibt