Właśnie zauważyłem, że wydaje się, że flaga -e
nie istnieje dla echo
polecenia w mojej powłoce w systemie Linux. Czy to tylko pomieszane ustawienie, czy jest to „normalne”?
Niektóre kody jako przykład:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
Wydruki:
-e \e[3;12r\e[3H
To działało wcześniej! Wydaje mi się, że niektóre stty
polecenia poszły bardzo źle, a teraz to już nie działa. Ktoś zasugerował, że mój sh
był właściwie sprawiedliwy bash
.
shell
escape-characters
echo
BrainStone
źródło
źródło
echo
/bin/sh
dash
Odpowiedzi:
Ponieważ użyłeś
sh
, niebash
, wtedyecho
polecenie wsh
nie ma opcji-e
. Zsh
strony podręcznika:I nie ma
\e
też:źródło
sh
implementacji obsługujeecho -e
, w czasie kompilacjibash
można powiedzieć, aby nie obsługiwałyecho -e
. Po prostu ten konkretny sh (prawdopodobniedash
) nie obsługuje,-e
podczas gdy ten konkretnybash
.-e
nie jest POSIX (w rzeczywistości echo POSIX zasadniczo nie akceptuje żadnych opcji (choć może to obsługiwać-n
), patrz tutaj ), aw/bin/sh
twoim systemie wydaje się być powłoką POSIX.-e
jest rozszerzeniem akceptowanym w niektórych powłokach, ale nie powinieneś na nim polegać, nie jest przenośne. Najlepiej użyjprintf
lub przełącz się na używanie powłoki, która maecho -e
.Zobacz także zastrzeżenia
\e
w komentarzach poniżej, które należy zastąpić\033
.źródło
sh
też nie rozpoznaje\e
. Użyj\033
Zauważ, że w dowolnym momencie i prawie w każdej powłoce możesz dowiedzieć się, które „echo” będzie wywoływane przez wpisanie
type echo
lubwhich echo
. Zwykle jest to wbudowana powłoka. To zależy od tego, które „echo” jest zainstalowane i od jakiej powłoki używasz.źródło
which echo
nie powinien być używany, prawdopodobnie nie powie ci, czy używasz wbudowanego, ponieważwhich
zwykle jest to zewnętrzny plik binarny.type
jest jednak dobre.type which
lubwhich which
). ;)