文字列の長さを調べる方法

シェルスクリプトで文字列の長さを調べたい場合は、以下の方法で取得することができます。


スポンサーリンク

変数に格納されている文字列長を取得

${#変数名}

変数に格納されていない文字列長を取得

wcコマンドとexprコマンドを使用した2つの例を以下に記します。

変数に格納されていない文字列長を取得・その1(wcコマンド編)

wcコマンドによりバイト数を取得できます。

変数に格納されていない文字列長を取得・その2(exprコマンド編)

exprコマンドにより文字列長を取得することもできます。

expr length 文字列

ファイル内の各行の文字列長を取得する

以下のようなファイル内容の場合の例を記します。

$ cat hello.txt 
HELLO WORLD
KONNICHIWA
NIHAO

以下、wcコマンドとexprコマンドを利用した2つの例を記します。

ファイル内の各行の文字列長を取得する(wcコマンド編)

$ for L in `cat hello.txt`
> do
>   echo $L | wc -c
> done
6
6
11
6

HELLO と WORLDの間にスペースがあるため、分割して表示されてしまいます。
IFSの値を変更し行単位で動作するようにします。

IFSの値を変更することにより、行単位で動作するようになります。
処理終了後、IFSの値をもとに戻しています。

$ for L in `cat hello.txt`; do echo $L | wc -c; done
$ IFS_BACKUP=$IFS
$ IFS=$'\n'
$ for L in `cat hello.txt`; do echo $L | wc -c; done
12
11
6
$ IFS=$IFS_BACKUP

上記の場合だと、改行コード分のバイト数が含まれているので echo -n とすれば以下の結果となります。

$ IFS=$IFS_BACKUP
$ IFS_BACKUP=$IFS
$ IFS=$'\n'
$ for L in `cat hello.txt`; do echo -n $L | wc -c; done
11
10
5
$ IFS_BACKUP=$IFS

ファイル内の各行の文字列長を取得する(exprコマンド編)

上記のwcコマンド例と同様に、IFSを指定しないとスペースが区切り文字となってしまうので、IFSを設定して実行した結果です。
改行文字はカウントされていないのがわかります。

$ IFS_BACKUP=$IFS
$ IFS=$'\n'
$ for L in `cat hello.txt`; do  expr length $L; done
11
10
5
$ IFS_BACKUP=$IFS

関連記事


スポンサーリンク


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-03-08 (土) 13:26:17