web-dev-qa-db-ja.com

'echo $ VAR |の出力に違いがある理由wc -c 'および' echo $ {#VAR} '?

私はBashスクリプトに取り組んでおり、特定の変数に含まれる文字列の長さが私の条件の1つです。現在の文字列はW5u7TBTzF17GGFV8DBJHvgAAAAIです。最初に、wc -cを使用して文字列の長さをカウントしました。

$ VAR='W5u7TBTzF17GGFV8DBJHvgAAAAI'; echo "$VAR" | wc -c
28

しかし、私のスクリプト条件[[ ${#VAR} -eq 28 ]]は決してパスしません。それから私はキャラクターを1つずつ数えることにしました。実際、文字列の長さは27文字であり、${#VAR}の値も27です。

$ echo "${#VAR}"
27

だから私は疑問に思っています-この違いはどこから来たのですか?

6
pa4080

echoが機能する方法です。今やる

echo koko

あなたが得る

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo koko
koko

しかし、echo -n kokoを実行すると、

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo -n koko
kokogeorgek@georgek-HP-Pavilion-17-Notebook-PC:~$

したがって、wcnewline characterもキャプチャしています。つかいます

echo -n "${VAR}" | wc -c

望ましい結果を得るため。 echoコマンドはnewline文字を追加するため、それもカウントされます。これを削除して実際のカウントを取得するには、-nオプションを使用します。

13
George Udosen