Untuk kepentingan orang-orang yang sampai di sini dengan mengklik hasil pencarian pertama setelah Googling "bash printf lolos", cara yang benar menggunakan printf untuk menghasilkan teks bash-escaped adalah:
printf " %q" "here is" "a few\n" "tests"
Output mana (tanpa baris baru tambahan):
here\ is a\ few\\n tests
Coba
printf "%s\n" "$string"
Lihat printf(1)
Anda dapat menggunakan $' '
untuk menyertakan baris baru dan karakter tab, lalu echo
biasa akan cukup:
#!/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
Saya juga telah membuat beberapa perubahan kecil lainnya pada skrip Anda. Selain membuat huruf kecil FUNCTION_NAME Anda, saya juga menggunakan sintaks fungsi yang lebih kompatibel secara luas. Dalam hal ini, tidak ada banyak keuntungan (seperti $' '
string adalah ekstensi bash) tetapi tidak ada alasan untuk menggunakan function func()
sintaks sejauh yang saya ketahui. Juga, cakupan string
mungkin juga lokal untuk fungsi yang digunakan, jadi saya mengubahnya juga.
Keluaran:
The path to K:\Users\ca, this is good
The second line 123
It also has to be 100% nice than %99
Bolehkah saya berkomentar bahwa "man printf" menunjukkan dengan jelas bahwa karakter "%" harus lolos melalui "%" lain sehingga printf "%%" menghasilkan satu "%"