文字列の長さを調べる方法 †シェルスクリプトで文字列の長さを調べたい場合は、以下の方法で取得することができます。 変数に格納されている文字列長を取得 †${#変数名}
変数に格納されていない文字列長を取得 †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の値を変更することにより、行単位で動作するようになります。 $ 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 関連記事 † |