※自分用の備忘メモです。
[ykt68@MacBook]$ STRING=abcdefghijklmnopqrstuvwxyz
[ykt68@MacBook]$ echo ${#STRING}
26
[ykt68@MacBook]$ expr "$STRING" : '.*'
26
[ykt68@MacBook]$
補足
後者の expr を使うほうは、STRING が '-' だったり、'+' みたいに
expr に解釈される数値演算子1文字の場合、syntax error になる。
[ykt68@MacBook]$ STRING='+'
[ykt68@MacBook]$ expr "$STRING" : '.*'
expr: syntax error
[ykt68@MacBook]$
なので、${#STRING} を使うのが無難かも。
追記
以下、mdstoyさんからのコメントでご教示いただきました wc を使った検証です。
[ykt68@MacBook ~]$ echo $SHELL
/bin/bash
[ykt68@MacBook ~]$ JP_STR='ラーメンたべたい by 矢野顕子'
[ykt68@MacBook ~]$ echo -n ${JP_STR} | wc -m
16
[ykt68@MacBook ~]$ echo -n ${JP_STR} | wc -c
40
[ykt68@MacBook ~]$ echo ${#JP_STR}
16
[ykt68@MacBook ~]$ expr "$JP_STR" : '.*'
40
[ykt68@MacBook ~]$
あれもこれも覚えるのは大変なので、イディオムとしてひとつ
覚えておくとしたら、
シェルで文字列の長さあるいはバイト数を数えるときは、
wc -m
と wc -c
を使い分ける
と、-m を-c と関連づけて覚えておくのがよいかも。
あと、wc -m
の前の echo -n
の -n
がないと、
改行が入って1文字多くカウントされるので、そこも
注意ポイント