マッチした部分の抽出
#!/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