マッチした部分の抽出
#!/bin/bash item="recty-8.10.12" if [[ ${item} =~ ([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then echo '${BASH_REMATCH}='"${BASH_REMATCH}" echo '${BASH_REMATCH[0]}='"${BASH_REMATCH[0]}" echo '${BASH_REMATCH[1]}='"${BASH_REMATCH[1]}" echo '${BASH_REMATCH[2]}='"${BASH_REMATCH[2]}" fi
${BASH_REMATCH}=8.10.12
${BASH_REMATCH[0]}=8.10.12
${BASH_REMATCH[1]}=8
${BASH_REMATCH[2]}=10# 前方一致
#!/bin/bash list="foo-2d foo-3d foo-3d-foo-4d gas-1d" echo "list = ${list}" echo '${name#foo-} で除去' for name in ${list}; do echo "$name --> ${name#foo-}" done echo '${name##*foo-} で除去' for name in ${list}; do echo "$name --> ${name##*foo-}" done
list = foo-2d foo-3d foo-3d-foo-4d gas-1d
${name#foo-} で除去
foo-2d --> 2d
foo-3d --> 3d
foo-3d-foo-4d --> 3d-foo-4d
gas-1d --> gas-1d
${name##*foo-} で除去
foo-2d --> 2d
foo-3d --> 3d
foo-3d-foo-4d --> 4d
gas-1d --> gas-1d# 前方一致
#!/bin/bash list=("foo-2d" "gas-2d" "gas-2d" "foo-2d-gas-2d") # 後方一致 echo "list=${list[@]}" echo '${name%-2d} で除去' for name in ${list[@]}; do echo "$name --> ${name%-2d}" done echo '${name%%-2d*} で除去' for name in ${list[@]}; do echo "$name --> ${name%%-2d*}" done echo '配列を、${name%%-2d*} で除去' newlist=${list[@]%%-2d*} echo ${newlist}
list=foo-2d gas-2d gas-2d foo-2d-gas-2d
${name%-2d} で除去
foo-2d --> foo
gas-2d --> gas
gas-2d --> gas
foo-2d-gas-2d --> foo-2d-gas
${name%%-2d*} で除去
foo-2d --> foo
gas-2d --> gas
gas-2d --> gas
foo-2d-gas-2d --> foo
配列を、${name%%-2d*} で除去
foo gas gas foo置換
#!/bin/bash list=("foo-3d" "foo-3d-foo-4d" "gas-1d") echo "list = ${list[@]}" # 前方のみ echo '${name/foo-/dac-/} で置換' for name in ${list[@]}; do echo "$name --> ${name/foo-/dac-/}" done # すべて echo '${name//foo-/dac-/} で置換' for name in ${list[@]}; do echo "$name --> ${name//foo-/dac-/}" done echo '${name^} で先頭だけ大文字' for name in ${list[@]}; do echo "$name --> ${name^}" done echo '${name^^} で全て大文字' for name in ${list[@]}; do echo "$name --> ${name^^}" done list=("FOO-3D" "FOO-3D-FOO-4D" "GAS-1D") echo "list = ${list}" echo '${name,} で先頭だけ小文字' for name in ${list[@]}; do echo "$name --> ${name,}" done echo '${name,,} で全て小文字' for name in ${list[@]}; do echo "$name --> ${name,,}" done
list = foo-3d foo-3d-foo-4d gas-1d
${name/foo-/dac-/} で置換
foo-3d --> dac-/3d
foo-3d-foo-4d --> dac-/3d-foo-4d
gas-1d --> gas-1d
${name//foo-/dac-/} で置換
foo-3d --> dac-/3d
foo-3d-foo-4d --> dac-/3d-dac-/4d
gas-1d --> gas-1d
${name^} で先頭だけ大文字
foo-3d --> Foo-3d
foo-3d-foo-4d --> Foo-3d-foo-4d
gas-1d --> Gas-1d
${name^^} で全て大文字
foo-3d --> FOO-3D
foo-3d-foo-4d --> FOO-3D-FOO-4D
gas-1d --> GAS-1D
list = FOO-3D
${name,} で先頭だけ小文字
FOO-3D --> fOO-3D
FOO-3D-FOO-4D --> fOO-3D-FOO-4D
GAS-1D --> gAS-1D
${name,,} で全て小文字
FOO-3D --> foo-3d
FOO-3D-FOO-4D --> foo-3d-foo-4d
GAS-1D --> gas-1d