読者です 読者をやめる 読者になる 読者になる

harry’s memorandum

おれおれメモ

Bashの変数パラメータ展開はやっぱし便利

linux shell

パターン照合演算子ってやつは便利だなーとしみじみ思ったので。

バイト数だしたり

$ 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