Bashの変数パラメータ展開はやっぱし便利
パターン照合演算子ってやつは便利だなーとしみじみ思ったので。
バイト数だしたり
$ x="/usr/share/apt/ubuntu-archive.gpg" $ echo ${#x} 33
切り出したり (${parameter:offset:length})
$ x="/usr/share/apt/ubuntu-archive.gpg" $ echo ${x:1:3} ${x:5:5} ${x:11:3} ${x:15:18} usr share apt ubuntu-archive.gpg
置換したりできる。
x="sumomo mo momo mo momo no uchi" $ echo $x sumomo mo momo mo momo no uchi $ echo ${x//momo/} su mo mo no uchi $ echo ${x//momo/banana} subanana mo banana mo banana no uchi
basenameやdirnameコマンドぽいこともできる。
_basename() { local path=$1 echo ${path##*/}; } _dirname() { local path=$1 echo ${path%/*}; } _basename2() { local path=$1 echo `_basename ${path%.*}`; } _extname() { local path=$1 echo ${path##*.}; } usage() { >&2 echo usage: $0 [path] exit 1; } [ $# -ne 1 ] && usage for func in _basename _dirname _basename2 _extname do echo "${func}(): `eval $func $1`" done
結果はこんなかんじ。
$ ./test.sh /usr/share/apt/ubuntu-archive.gpg _basename(): ubuntu-archive.gpg _dirname(): /usr/share/apt _basename2(): ubuntu-archive _extname(): gpg