Il seguente script ceduta un'uscita inaspettata:Come faccio a uscire da una serie di backslash in una bash printf?
printf "escaped slash: \\ \n"
printf "2 escaped slashes: \\\\ \n"
printf "3 escaped slashes: \\\\\\ \n"
printf "4 escaped slashes: \\\\\\\\ \n"
Esegui come uno script bash sotto Ubuntu 14, vedo:
escaped slash: \
2 escaped slashes: \
3 escaped slashes: \\
4 escaped slashes: \\
Err .. cosa?
Nota: questo funziona perché si impedisce a 'bash' di rimuovere i backslash prima che' printf' veda l'argomento. – chepner
@chepner: sono d'accordo. Sembra che l'ordine di valutazione sia: 1) 'bash' espande la stringa' FORMAT' * (solo se circondata da virgolette doppie!) *. 2) 'printf' combina' ARGUMENTS' e 'FORMAT' in una stringa. 3) La stringa finale viene nuovamente espansa (cioè \\ diventa \). 4) Il risultato è finalmente stampato. –
Chiudi; 'printf' elabora solo il' FORMAT' prima di inserire gli argomenti; confronta 'printf '\ n'' con' printf'% s '' \ n''. – chepner