Muszę wydrukować następujące trzy wiersze w jednym poleceniu drukowania bez użycia polecenia echo. Więc wybrałem polecenie printf. Oto trzy linie:
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
Do tej pory zrobiłem:
printf "
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
"
Ale dostałem błąd bash dla trzeciej linii „,”.
Czy ktoś mnie oświeci.
command-line
bash
Narwen
źródło
źródło
print
poleceniemprintf
polecenie.Odpowiedzi:
Lepszy w użyciu:
Otrzymujesz ten błąd, jak powiedzieli tu inni, z powodu
%
charakteru, który jest wyjątkowy i należy go uciec.Zobacz
man 1 printf
więcej informacji.źródło
/your_string_to_search
a następnie naciśnij klawisz enter.printf
to, że ta%
postać i to, co robi!%
jest postacią specjalną wprintf
. To właśnie powoduje błąd. Musisz uciec jak%%
.$
może być również podstawiony w cudzysłowach przez zewnętrzną powłokę, więc powinieneś uciec od tego (\$
). Zwykle łatwiej jest używać pojedynczych cudzysłowów.źródło
$variable
jest zastąpiony przez powłokę, a nie przezprintf
. Jeśli otoczysz swój ciąg pojedynczymi cudzysłowami zamiast podwójnych cudzysłowów,$
powłoka nie będzie interpolowana i zostanie przekazana bezpośrednio doprintf
.$
jest również specjalny, gdy następuje po{
nim specjalny symbol parametru lub jedna lub więcej cyfr . Podstawowa koncepcja tego, co mówisz, jest jednak poprawna.%jest wyjątkowy dla printf: jest wiodącym w formacie char specyfikatorami. Jeśli chcesz dosłownie procent, użyj
%%
źródło
To trochę zaskakujące, gdy nie możesz użyć
echo
polecenia, które wybrałeśprintf
zamiast tego.Dlaczego nie
cat
?źródło
$foo
w tekście, użyjcat <<'EOF'
zamiastcat <<EOF
.printf
jest sformatowanym drukiem, który przyjmuje ciąg formatu jako pierwszy parametr. Reszta parametrów jest używana w ciągu formatu. Podczas używaniaprintf
należy pamiętać o trzech rzeczach :Chociaż wiele języków ma
printf
instrukcje / polecenia / funkcje, wszystkie się nieco różnią, więc zawsze weryfikuj szczegóły w dokumentacji specyficznej dla języka (C, bash, php, perl itp.),Nigdy nie należy używać informacji dostarczonych przez użytkownika w ciągu formatu. Jest to zawsze usterka bezpieczeństwa. Jeśli chcesz wyświetlić ciąg dostarczony przez użytkownika, użyj ciągu formatującego, takiego jak
"%s"
.Zarówno ukośnik odwrotny (
\
), jak i znak procentu (%
) są znakami zmiany znaczenia, które zmieniają znaczenie następujących znaków, jeśli chcesz, aby znak wyjściowy pojawiał się na wyjściu, należy go zmienić lub pobrać z innego parametru. Znak dolara ($
) nie jest specjalny dla printf, ale jest szczególny dla powłoki, więc uważaj na swoje cytaty.printf
doskonale nadaje się do formatowania liczb. spójrz na strony podręcznika, aby uzyskać szczegółowe informacjeźródło
Jak wspomnieli inni,
%
symbol ten jest wyjątkowyprintf
.Jeśli chcesz po prostu wydrukować taki ciąg, jaki jest, podaj
printf
%s
jako pierwszy argument, a ciąg otoczony pojedynczymi cudzysłowami jako drugi argument:Użycie pojedynczych cudzysłowów zamiast podwójnych cudzysłowów powstrzymuje powłokę przed interpolacją symboli takich jak
$
.źródło