Linux

シェルスクリプトで文字列を分割し末尾を取得したい

More than 3 years have passed since last update.

シェルスクリプトで「/home/hoge/fuga」や「/home/hoge/fuga/foo」のような文字列を「/」で分割した時の末尾の文字列(fugaとfoo)を取得してみたときのメモ


trコマンドを使う

以下で出来ました。

trコマンドで「/」を「 」に変換し、一旦配列に入れ、その後末尾を取得しました。

path="/home/hoge/fuga"

array=( `echo $path | tr -s '/' ' '`)
last_index=`expr ${#array[@]} - 1`

# print fuga
echo ${array[${last_index}]}

以下のように関数にしてみました。

function get_last_dir() {

path=$1

array=( `echo $path | tr -s '/' ' '`)
last_index=`expr ${#array[@]} - 1`
echo ${array[${last_index}]}
return 0
}

# main
path="/home/hoge/fuga"
last_dir=`get_last_dir $path`
echo $last_dir


IFSを使ってみる

IFS(Internal Field Separator )をデフォルトの「$' ¥t¥n'」から「/」に変更して配列に格納し、その後末尾を取得します。

ちなみにdir=($path)という部分をdir=(echo $path)としていると動かなかった。。(なんでか分かってないですが。。。)

function get_last_dir() {

path=$1

IFS_BACKUP=$IFS
IFS='/'
array=($path)
IFS=$IFS_BACKUP
last_index=`expr ${#array[@]} - 1`
echo ${dir[${last_index}]}
return 0
}

# main
path="/home/hoge/fuga"
last_dir=`get_last_dir $path`
echo $last_dir