Dlaczego „wc -c” wypisuje jeszcze jedną wartość za pomocą echa?


Odpowiedzi:


21

echowypisz newline ( \n) na końcu linii

echo abcd | xxd
0000000: 6162 6364 0a          abcd.

W przypadku niektórych echoimplementacji możesz użyć -n:

-n nie wysyłaj końcowego znaku nowej linii

i przetestuj:

echo -n abcd | wc -c
4

W przypadku niektórych innych potrzebujesz \csekwencji ucieczki:

\c: Pomiń <newline>argument, który w przeciwnym razie następuje po ostatnim argumencie w danych wyjściowych. Wszystkie znaki następujące '\c'po argumentach zostaną zignorowane.

echo -e 'abcd\c' | wc -c
4

Przenośnie użyj printf:

printf %s abcd | wc -c
4

(zwróć uwagę, że wc -cliczy się bajty, a nie znaki (choć w przypadku abcdsą one generalnie równoważne). Użyj wc -mdo zliczenia znaków).


Należy pamiętać, że chodzi o to, że w niektórych echoimplementacjach (wszystkie zgodne jedynek Unix co najmniej), jest to echo 'abcd\c', że wyjść abcdsama. echo -e 'abcd\c'w echoimplementacjach zgodnych z Uniksem wyświetlałby dane wyjściowe -e abcd.
Stéphane Chazelas,

5

Jeśli uruchomisz echobez -nopcji, po argumentach zapisuje znak nowej linii. W przeciwnym razie, jeśli wpiszesz echo foo, następny monit powłoki pojawi się po prawej stronie foo. Więc  wcliczy się przełamane.

Jak mogę temu zapobiec echo?

echo -n abcd | wc -c

2

Domyślnie echowypisze znak nowego wiersza ( \n) po łańcuchu (dlatego w następnym wierszu zamiast wiersza polecenia, w którym abcdjest drukowany , pojawi się monit powłoki ).

Możesz spróbować dodać -nparametr, echoaby wyłączyć końcowy znak nowej linii.

echo -n abcd | wc -c
4
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.