Jak wyświetlić echo jednego lub więcej znaków tabulacji za pomocą skryptu bash? Kiedy uruchamiam ten kod
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
rozumiem
res=[ x] # that is [<space>x]
echo -e ' \t '
wyświetli echo „spacja tabulacja spacja nowa linia” ( -e
oznacza „włącz interpretację znaków ukośnika odwrotnego”):
$ echo -e ' \t ' | hexdump -C
00000000 20 09 20 0a | . .|
echo -e
nie działa z Makefiles?echo -e
nie jest POSIX imake
wywołania,/bin/sh
które zwykle nie są używane przez program, używają interaktywnie i zwykle nie zostały-e
zaimplementowane. Aby zapewnić przenośność, użyjprintf '\t'
zamiast tego.man
stronaecho
polecenia nie wspomina o tej opcji-e
. Ta opcja jest jednak akceptowana.Użyj
printf
, nieecho
.Istnieje wiele różnych wersji
echo
polecenia. Istnieje/bin/echo
(która może, ale nie musi być wersja GNU Coreutils, w zależności od systemu), aecho
polecenie jest wbudowane w większość powłok. Różne wersje mają różne sposoby (lub brak możliwości) określenia lub wyłączenia znaków zmiany znaczenia dla znaków kontrolnych.printf
z drugiej strony ma znacznie mniejszą zmienność. Zwykle może istnieć jako polecenie/bin/printf
i jest wbudowany w niektóre powłoki (bash i zsh to mają, tcsh i ksh nie), ale różne wersje są znacznie bardziej do siebie podobne niż różne wersjeecho
. I nie musisz pamiętać opcji wiersza poleceń (z kilkoma wyjątkami; GNU Coreutils printf akceptuje--version
i--help
, a wbudowany bash printf akceptuje-v var
przechowywanie danych wyjściowych w zmiennej).Na przykład:
A teraz nadszedł czas, żebym przyznał, że
echo
zadziała równie dobrze w przypadku przykładu, o który pytasz; wystarczy wstawić podwójny cudzysłów wokół argumentu:jak napisał kmkaplan (dwa i pół roku temu, właśnie to zauważyłem!). Problem z oryginalnymi poleceniami:
nie jest z
echo
; polega na tym, że skorupa zastąpiła zakładkę spacją, zanimecho
ją zobaczyła.echo
nadaje się do prostych wyników, takich jakecho hello world
, ale powinieneś używać,printf
gdy chcesz zrobić coś bardziej złożonego. Ty może dostaćecho
się do pracy, ale otrzymany kod może zawieść po uruchomieniu go z innejecho
realizacji lub innej powłoki.źródło
Umieść ciąg między podwójnymi cudzysłowami:
źródło
Możesz także spróbować:
źródło
musisz użyć flagi -e dla echa, a potem możesz
źródło
Ze strony podręcznika użytkownika bash:
Możesz to zrobić:
źródło
Za pomocą klawiszy verbatim,
^V
(CTRL+V
,C-v
, cokolwiek ).Podczas pisania
^V
w terminalu (lub w większości edytorów uniksowych) następujący znak jest pobierany dosłownie . Możesz użyć tego do wpisania literowego znaku tabulacji wewnątrz echa łańcucha.Coś jak następujące prace:
Dokumenty Bash ( qv , „quoted-insert”)
uwaga dodatkowa: zgodnie z tym
ALT+TAB
powinniśmy zrobić to samo, ale wszyscy związaliśmy tę sekwencję z przełączaniem okien, więc nie możemy jej użyć-
Uwaga: możesz używać tej strategii z różnego rodzaju nietypowymi postaciami. Jak zwrot karetki:
Wynika to z faktu, że znak powrotu karetki to ASCII 13, a M to 13 litera alfabetu, więc kiedy piszesz
^M
, otrzymujesz 13 znak ASCII. Możesz zobaczyć to w akcji, używającls^M
pustego monitu, który wstawi znak powrotu karetki, powodując, że będzie on działał tak samo, jak trafiłeś return. Kiedy te znaki są normalnie interpretowane, dosłownie dostajesz dosłowny znak.źródło
grep
do łapania linii zawierającychtab
znaki.Używanie echa do drukowania wartości zmiennych jest częstą pułapką Basha. Link referencyjny:
http://mywiki.wooledge.org/BashPitfalls#echo_.24foo
źródło
Jeśli chcesz użyć
echo "a\tb"
skryptu, uruchom skrypt jako:Alternatywnie możesz dać myscript.sh uprawnienie do wykonywania, a następnie uruchomić skrypt.
źródło
źródło