Poniższy skrypt przyniosły nieoczekiwany wynik:Jak uniknąć serii odwróconych ukośników w bash printf?
printf "escaped slash: \\ \n"
printf "2 escaped slashes: \\\\ \n"
printf "3 escaped slashes: \\\\\\ \n"
printf "4 escaped slashes: \\\\\\\\ \n"
Uruchom jako skryptu bash pod Ubuntu 14, widzę:
escaped slash: \
2 escaped slashes: \
3 escaped slashes: \\
4 escaped slashes: \\
Err .. co?
Pamiętaj, że działa to, ponieważ zapobiegasz, aby 'bash' usuwał jakiekolwiek ukośniki, zanim' printf' zobaczy argument. – chepner
@chepner: Zgadzam się. Wydaje się, że kolejność oceny jest następująca: 1) 'bash' rozwija ciąg' FORMAT' * (tylko jeśli jest otoczony podwójnymi cudzysłowami!) *. 2) 'printf' łączy" ARGUMENTS "i" FORMAT "w jeden ciąg znaków. 3) Ostatni łańcuch jest ponownie rozwijany (tzn. \\ staje się \). 4) Wynik zostaje ostatecznie wydrukowany. –
Zamknij; 'printf' przetwarza tylko' FORMAT' przed wstawieniem argumentów; porównaj 'printf '\ n'' z' printf'% s '' \ n''. – chepner