hiranoです。桜が綺麗です。
シェルスクリプトで変数に格納されている文字列の部分文字列を取得する方法がどうしても憶えられなくていつも何度もググって試してみることになるので備忘で記録しておきます。
未来のおれ、ここに書いたことを忘れるな!
記録したこと一覧
- 基本編
- 先頭1文字を取得
- 先頭2文字を取得
- 末尾1文字を取得
- 末尾2文字を取得
- 先頭1文字を削除して、残りを取得
- 先頭2文字を削除して、残りを取得
- 末尾1文字を削除して、残りを取得
- 末尾2文字を削除して、残りを取得
- 応用編
- 先頭が / で始まっていたら削除して、残りを取得
- 末尾が / で終わっていたら削除して、残りを取得
- 諦め編
基本編
オリジナル
${ORG}
=> /var/www/html
先頭1文字を取得
${ORG:0:1}
=> /
先頭2文字を取得
${ORG:0:2}
=> /v
末尾1文字を取得
${ORG: -1}
=> l
※コロンの後の空白が重要
末尾2文字を取得
${ORG: -2}
=> ml
※コロンの後の空白が重要
先頭1文字を削除して、残りを取得
${ORG:1}
=> var/www/html
先頭2文字を削除して、残りを取得
${ORG:2}
=> ar/www/html
末尾1文字を削除して、残りを取得
${ORG:0:-1}
=> /var/www/htm
末尾2文字を削除して、残りを取得
${ORG:0:-2}
=> /var/www/ht
応用編
オリジナル
${ORG1}
=> var/www/html
${ORG2}
=> /var/www/html/
先頭が / で始まっていたら削除して、残りを取得
${ORG1#/}
=> var/www/html
${ORG2#/}
=> var/www/html/
末尾が / で終わっていたら削除して、残りを取得
${ORG1%/}
=> var/www/html
${ORG2%/}
=> /var/www/html
諦め編
いずれも変数でやろうとしましたが、パターン多すぎて無理ゲーだったので実現方法だけ載せます。
dirname
と basename
は優秀です。
オリジナル
${ORG1}
=> var/www/html
${ORG2}
=> /var/www/html/
${ORG3}
=> /var
${ORG4}
=> html
親ディレクトリを取得
dirname ${ORG1}
=> var/www
dirname ${ORG2}
=> /var/www
dirname ${ORG3}
=> /
dirname ${ORG4}
=> .
末端のディレクトリを取得
basename ${ORG1}
=> html
basename ${ORG2}
=> html
basename ${ORG3}
=> var
basename ${ORG4}
=> html