シェルスクリプトで変数の先頭・末尾のtrim処理いろいろ

2019-03-09Bash, CentOS, Cygwin, Linux, Ubuntu

ユーザの入力情報を取り扱うときには、誤ってスペースを入力されたことを考慮した対策が必要です。
入力情報を変数に代入していた場合は先頭・末尾のtrim処理を行っておくと良いです。

Bashシェルスクリプトでtrimを実行する方法はいくつかあるので取り上げてみました。

前提

入力情報は INPUT という変数に格納しておきます。

$ INPUT=' genzouw postit  '

$ echo "[${INPUT}]"
[ genzouw postit  ]

以下のように出力されるようにしたい。

[genzouw postit]

trimの方法1:sed

僕の中ではセオリー。
sed が使えると headtailtr も代用できるし非常に便利。

$ echo "${INPUT}" | sed 's/^ *\| *$//'
genzouw postit

trimの方法2:単純にechoする

echoに食わせる。

$ echo ${INPUT}
genzouw postit

簡単でよいが、問題はあります。
中央部分のスペースが1つにマージされてしまいます。

$ INPUT2=" xxx             yyy "

$ echo ${INPUT2}
xxx yyy

trimの方法3:xargsに食わせる

実は、 方法2 と大きな違いはない。

$ echo "${INPUT}" | xargs echo
genzouw postit

trimの方法4:Bash組み込みの変数参照機能を使う

Bashの組み込み機能として、変数参照時に先頭あるいは末尾から特定の文字を除去する機能があります。
貪欲なマッチング を利用して除去します。

# 末尾からスペースを除去
$ X="${INPUT%% }"

# 先頭からスペースを除去
$ echo "${X## }"
genzouw postit

2019-03-09Bash, CentOS, Cygwin, Linux, Ubuntu