Pour le bénéfice des personnes qui sont arrivées ici en cliquant sur le premier résultat de recherche après avoir google "bash printf échappé", la bonne façon d'utiliser printf pour générer du texte échappé par bash est :
printf " %q" "here is" "a few\n" "tests"
Qui affiche (sans retour à la ligne) :
here\ is a\ few\\n tests
Essayez
printf "%s\n" "$string"
Voir printf(1)
Vous pouvez utiliser $' '
pour encadrer les sauts de ligne et les caractères de tabulation, puis un simple echo
suffira :
#!/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
J'ai également apporté quelques autres modifications mineures à votre script. En plus de mettre votre FUNCTION_NAME en minuscules, j'ai également utilisé la syntaxe de fonction plus largement compatible. Dans ce cas, il n'y a pas beaucoup d'avantages (car $' '
les chaînes sont de toute façon une extension bash) mais il n'y a aucune raison d'utiliser le function func()
syntaxe pour autant que je sache. En outre, la portée de string
peut tout aussi bien être local à la fonction dans laquelle il est utilisé, donc j'ai changé cela aussi.
Sortie :
The path to K:\Users\ca, this is good
The second line 123
It also has to be 100% nice than %99
Puis-je remarquer que "man printf" montre clairement qu'un caractère "%" doit être échappé au moyen d'un autre "%" donc printf "%%" donne un seul "%"