ShellScript
set -euo pipefail
または set -Eeuxo pipefail
-E 入れると外部コマンド呼び出した時に trap が動く
$@ と "$@"
基本的には "$@" でいい
オプションなどスペース区切りの文字は配列で展開できる
options=(-j 5 -B) # ksh: set -A options -- -j 5 -B
make "${options[@]}" file
ディレクトリ取ってくるパターン
code:dir.sh
CWD=$(cd $(dirname "$0") && pwd)
ROOT=$(cd $(dirname "$0") && cd ../.. && pwd) // script の置き場所からリポジトリルートへ戻ってゲット
拡張子とる
code:expand
f="hoge/fuga.HEIC"
ext=${f##*.} # HEIC
## 最長一致で *. を消す
seq
seq start [step] end
-f で format、数値は %d
seq -f "%02g" 0 5 55
5分刻み
zero padding
printf %02d 4
loop
code:loop.sh
for level in 1 2 3 4 5; do
echo $level
done
ARRAY=(foo bar)
for word in ${ARRAY@}; do echo $word
done
ファイルごとにループ
code:files.sh
// かんたん
for file in $(ls $DIR); do
echo $file
done
// 空や空白や引用符を含むファイル名を考慮する
while read -d $'\0' file; do
echo $file
done < <(gfind $DIR -mindepth 1 -maxdepth 1 -print0)
case
code:case.sh
update_status() {
arg=$1
case $arg in
foo)
// when arg is "foo"
;;
bar)
// when arg is "bar"
;;
*)
// other
;;
esac
}
日付をパーツごとに束縛
read YEAR MONTH DAY < <(date '+%Y %m %d')