Bashでよく使う便利な構文

shellで便利な構文 Shell

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

コメント

タイトルとURLをコピーしました