Neden “wc -c” yankı ile bir değer daha yazdırıyor?


13

Koşarken

echo abcd | wc -c

geri döner 5.
Ama kelime abcdsadece 4 karakter uzunluğunda.

Is echosözcükten sonra bazı özel karakter baskı abcd?

Bunu echoyazdırmayı engelleyebilir miyim ?



1
Bir wc -cşeyin kaç karakter olduğunu size söylemediğini lütfen unutmayın; sadece kaç bayt olduğunu söyler.
tchrist

Yanıtlar:


21

echosatır \nsonunda satırsonu ( ) yazdır

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

Bazı echouygulamalarda şunları kullanabilirsiniz -n:

-n sondaki satırsonu çıktısını alma

ve test edin:

echo -n abcd | wc -c
4

Bazıları ile \ckaçış sırasına ihtiyacınız var :

\c: Bunun <newline>çıktıdaki son argümanı izlediğini bastırın. '\c'Bağımsız değişkenlerde yer alan tüm karakterler yok sayılır.

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

Taşınabilir olarak şunu kullanın printf:

printf %s abcd | wc -c
4

( wc -ckarakterleri değil, baytları saydığına dikkat edin ( abcdgenellikle eşdeğer olmalarına rağmen ). wc -mKarakterleri saymak için kullanın ).


Önemli olan nokta, bazı echouygulamalarda (en azından tüm Unix uyumlu olanlar), yalnızca echo 'abcd\c'çıktılar olmasıdır abcd. echo -e 'abcd\c'Unix uyumlu echouygulamalar çıktı -e abcd.
Stéphane Chazelas

5

Seçenek echoolmadan çalışırsanız -n, bağımsız değişkenlerden sonra yeni satır karakteri yazar. Aksi takdirde, yazdıysanız echo foo, sonraki kabuk isteminiz foo. Yeni çizgiyi  wcde sayıyor.

Bunu echoyazdırmayı nasıl önleyebilirim ?

echo -n abcd | wc -c

2

Varsayılan olarak, dizeden sonra yeni satır karakteri ( ) echoyazdırır (bu nedenle , yazdırılan satır yerine aynı satırda kabuk istemini görürsünüz .)\nabcd

Sondaki yeni satır karakterini devre dışı bırakmak için bir -nparametre eklemeyi deneyebilirsiniz echo.

echo -n abcd | wc -c
4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.