Secara tidak sengaja, saya menemukan bahwa wc
penghitungan berbeda tergantung pada bagaimana ia mendapat input dari bash:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Apakah ini - IMHO membingungkan - perilaku didokumentasikan di suatu tempat? Apa yang wc
diperhitungkan di sini - apakah ini asumsi baris baru?
bash
newlines
wc
here-string
rexkogitans
sumber
sumber
od -c
untuk melihat persis apa yang Anda miliki.xxd -g1
,.printf "$s"
bukan skrip Anda yang sebenarnya ... semoga maksud Andaprintf "%s" "$s"
Jawaban:
Perbedaan ini disebabkan oleh baris baru yang ditambahkan ke string di sini. Lihat manual Bash :
wc
menghitung dengan cara yang sama, tetapi inputnya berbeda.sumber
printf %s "$var"
(atauprint -rn -- "$var"
dengan cangkang mirip ksh), bukanprintf "$var"
yang tidak akan bekerja dengan benar untuk nilai-nilai$var
yang mengandung%
atau karakter backslash (atau mulai dengan-
sebagian besar implementasi).rc
tidak menambahkan karakter baris baru.Ini adalah baris baru yang berhasil ditambahkan oleh pengalih-string di sini:
sumber