このエントリーをはてなブックマークに追加


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

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


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

${#変数名}
  • 実行結果
    $ hello="Hello world"
    $ echo ${#hello}
    11

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

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

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

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

  • 実行結果
    echoコマンドの場合、改行コード分も含まれるので以下の実行結果となります。
    $ echo "hello world" | wc -c
    12
    改行をしないように-nをつけると以下の実行結果となります。
    $ echo -n "hello world" | wc -c
    11

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

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

expr length 文字列
  • 実行結果
    $ expr length "hello world"
    11

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

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

$ 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: 2015-03-20 (金) 22:26:55