Para el beneficio de las personas que llegaron aquí haciendo clic en el primer resultado de búsqueda después de buscar en Google "bash printf escaped", la forma correcta de usar printf para generar texto con escape bash es:
printf " %q" "here is" "a few\n" "tests"
Qué salidas (sin una nueva línea final):
here\ is a\ few\\n tests
Prueba
printf "%s\n" "$string"
Ver imprimirf(1)
Puedes usar $' '
para encerrar las líneas nuevas y los caracteres de tabulación, luego un echo
simple será suficiente:
#!/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
También he hecho un par de otros cambios menores a su script. Además de poner tu FUNCTION_NAME en minúsculas, también he usado la sintaxis de función más compatible. En este caso, no hay mucha ventaja (ya que $' '
las cadenas son una extensión bash de todos modos) pero no hay razón para usar el function func()
sintaxis hasta donde yo sé. Además, el alcance de string
también puede ser local para la función en la que se usa, así que también lo cambié.
Salida:
The path to K:\Users\ca, this is good
The second line 123
It also has to be 100% nice than %99
¿Puedo comentar que "man printf" muestra claramente que un carácter "%" tiene que escaparse por medio de otro "%", por lo que printf "%%" da como resultado un solo "%"