bashの文法はとてもシンプルで覚えやすいが、一部の構文が似ているため、
よく忘れてしまうものを整理し、今後の参照となります。
${0##*/}と${0%/*}の意味
実際に使って、効果を見ながら、覚えましょう。事前に以下の変数を定義し、構文を使います。
# fileName=/tmp/kobun/test.file.csv
${}で事前に定義した変数の内容から以下の値を取得できます。
フルパスから最初のスラッシュ「/」までの内容を除外できる方法
echo ${fileName#*/}
結果;
tmp/kobun/test.file.csv
フルパスから最後のスラッシュ「/」までの内容を除外できる方法
echo ${fileName##*/}
結果:
test.file.csv
フルパスから最初のドット「.」までの内容を除外できる方法
echo ${fileName#*.}
結果;
file.csv
フルパスから最後のドット「.」までの内容を除外できる方法
echo ${fileName##*.}
フルパスから最後のスラッシュ「/」以降の内容を除外できる方法
echo ${fileName%/*}
結果;
/tmp/kobun
フルパスから最初のスラッシュ「/」以降の内容を除外できる方法
echo ${fileName%%/*}
結果;
(空)
フルパスから最後のドット「.」以降の内容を除外できる方法
echo ${fileName%.*}
結果;
/tmp/kobun/test.file
フルパスから最初のドット「.」以降の内容を除外できる方法
echo ${fileName%%.*}
結果;
/tmp/kobun/test
# は左側の内容を除外する
% は右側の内容を除外する
一つ文字の場合は最小のマッチ、二つ文字の場合は最大のマッチ。
変数の内容から一部のみを切り出す方法
最初から5文字を取得する
echo ${fileName:0:5}
結果;
/tmp/
6文字目から5文字を取得する
echo ${fileName:5:5}
結果;
kobun
変数の指定な内容を置換する
以下の内容を確認するため、変数の内容を変更する
fileName=/tmp/kobun/kobun/test.file.csv
変数の指定な内容を置換する(一つ目のみ)
echo ${fileName/kobun/new}
結果;
/tmp/new/kobun/test.file.csv
変数の指定な内容を置換する(全部)
echo ${fileName//kobun/new}
結果;
/tmp/new/new/test.file.csv
変数内容の長さを取得する
echo ${#fileName}
結果;
30
shellの配列について
配列の定義
fileNames=(a.csv b.csv c.tsv d.txt)
配列の内容をすべて取得する方法
※配列の要素数を取得するとき、[@] でも [*] でも差異はないようです。
echo ${fileNames[@]}
echo ${fileNames[*]}
結果:
a.csv b.csv c.tsv d.txt
配列の要素数を取得する方法
※配列の要素数を取得するとき、[@] でも [*] でも差異はないようです。
echo ${#fileNames[@]}
echo ${#fileNames[*]}
結果;
4