Próbuję drukować -nza pomocą echopolecenia. Ale jeśli po prostu piszę echo -n, wydaje tylko nowy wiersz, nie pokazuje się -n, zamiast tego wydaje nowy wiersz.
getopt(???) do analizowania wiersza poleceń
Próbuję drukować -nza pomocą echopolecenia. Ale jeśli po prostu piszę echo -n, wydaje tylko nowy wiersz, nie pokazuje się -n, zamiast tego wydaje nowy wiersz.
getopt(???) do analizowania wiersza poleceń
Odpowiedzi:
Problem polega na tym, że echointerpretuje to -njako argument. W domyślnej implementacji bash oznacza to (od help echo):
-n do not append a newline
Istnieją różne sposoby obejścia tego:
Zmień go w coś, co nie jest opcją, dołączając inną postać. Na przykład powiedz, echoaby nie drukować nowego wiersza -n, a następnie powiedz mu, aby zinterpretował znaki ukośnika odwrotnego -ei wyraźne dodanie nowego wiersza.
$ echo -ne '-n\n'
-nAlternatywnie, po prostu wstaw spację
$ echo " -n"
-n
To jednak dodaje przestrzeń, której prawdopodobnie nie chcesz.
Użyj przed nim znaku niedrukowalnego. Tutaj. Używam backspace ( \b)
$ echo -e "\b-n"
-n
Dodaje to także dodatkową postać, której prawdopodobnie nie chcesz.
Użyj podstępu
$ echo n- | rev
-n
revPolecenie po prostu drukuje jego wyjście odwrócone.
Użyj odpowiedniego narzędzia do pracy
$ printf -- '-n\n'
-ngrep '^-n'. pritnfto naprawdę droga.
printftak jest lepiej, ale pytanie dotyczy sprawiedliwego echo.
echo -e "-n\c"robi dokładnie to samo.
\ctłumi dalszą produkcję
Czasami dobrym pomysłem jest użycie odpowiedniego narzędzia. Zamiast printftego możesz użyć :
% printf "-n\n"
-n
echo, podczas gdy printfjest lepiej znormalizowany .
Możesz użyć tego polecenia, ale dodaje ono dodatkowe miejsce.
echo -e "\r-n"
To jest rodzaj włamania.
-e włącza symbole poleceń z odwrotnym ukośnikiem.
\r jest zwrot karetki.
Właściwie każdy \prawidłowy znak zrobi w dowolnym miejscu ciągu.
Możesz sprawdzić, które są ważne przez help echo.
echo "-n"nie działa, ponieważ -njest wykorzystywany jako parametr echo.
PS Najlepszym rozwiązaniem jest IMHO
echo -e "-n\c"
Nie dodaje się żadnych dodatkowych znaków .
echo -e "-n\n"
wypisuje to samo, ale z nowym znakiem linii.
-njest ważny, -nfoonie jest tak, że zostanie wydrukowany.
man echoteż to ma. Ale helpjest trochę lepiej.
/bin/echojest zupełnie inną rzeczą i kiedy uruchamiasz echobash, dostajesz wbudowaną funkcję, która może być zupełnie inna w zależności od twojej powłoki.
Myślę, że jeśli zdecydowanie chcesz używać echotylko, powinno cię to zadowolić:
echo "-n "
Działa to, ponieważ while -njest prawidłową opcją dla echo, -na spacja po nim nie jest. Ponieważ nie jest to opcja, echowystarczy ją wydrukować.
Naprawdę się nad tym zastanowiliście.
echo -e \\055n
Lub bez końca nowej linii
echo -en \\055n
printf "-n\n" jest przesadzanie?
/bin/echoprzynajmniej jeśli jest wywoływane jakoecho -e "\055n"
Aby rozszerzyć odpowiedź @ AB, jedynym przenośnym sposobem na użycie echojest powstrzymanie się od korzystania z takich opcji jak -n. printfZamiast tego rozważ użycie, jeśli jest dostępne. Ta strona zawiera szczegółowe informacje i bardzo dobrze wyjaśnia, kiedy, jak echoi jakprintf należy z niej korzystać:
Obecnie echo (1) jest przenośne tylko wtedy, gdy pominiesz flagi i sekwencje specjalne. Zamiast tego użyj printf (1), jeśli potrzebujesz więcej niż zwykłego tekstu.
W skrypcie Bash możesz uruchomić:
echo -n -
echo n
Lub w powłoce interakcyjnej:
echo -n - ; echo n
To echojest -postać i npostać.
-pilot6@Pilot6:~$. Drugie wyjścia n.
&&- nie powiedziałbym, że ta odpowiedź jest zła .
Możesz biegać
printf -n;echo
Testowane w Busybox Ash
ashto nazwa powłoki Almquist.
echo -n -- -ndziała (nie masz pod ręką żadnego linuksa do przetestowania)?