Skip to content

Instantly share code, notes, and snippets.

@ko1nksm
Last active March 30, 2017 10:31
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save ko1nksm/e19e70a1298057223206d9d4979c2ea4 to your computer and use it in GitHub Desktop.
表現 変数があれば 変数が空なら (:なしは定義済みかどうか) 三項演算子風表現
${変数名:-文字列} 変数の中身を返す 文字列を返す 変数 ? 変数 : 文字列
${変数名:=文字列} 変数の中身を返す 変数に文字列を代入し、変数の中身を返す 変数 ? 変数 : (変数 = 文字列)
${変数名:?文字列} 変数の中身を返す 文字列を出力し終了する 変数 ? 変数 : abort(文字列)
${変数名:+文字列} 文字列を返す 空を返す 変数 ? 文字列 : ''
表現 説明
${変数名:位置} n文字目から末尾まで表示。1文字目は0
${変数名:位置:長さ} n文字目から長さ分表示
${変数名^} 1文字目を大文字にする
${変数名^^} 全部を大文字にする
${変数名,} 1文字目を小文字にする
${変数名,,} 全部を小文字にする
${変数名~} 1文字目を大文字小文字反転する
${変数名~~} 全部を大文字小文字反転する
表現 説明 例1 (/foo/bar/baz) 例2 (foo/bar/baz)
${変数名#パターン} 先頭パターンマッチ部分(最短)を削除 ${var#*/} => foo/bar/baz ${var#*/} => bar/baz
${変数名##パターン} 先頭パターンマッチ部分(最長)を削除 ${var##*/} => baz (basename) ${var##*/} => baz
${変数名%パターン} 末尾パターンマッチ部分(最短)を削除 ${var%/*} => /foo/bar (dirname) ${var%/*} => foo/bar
${変数名%%パターン} 末尾パターンマッチ部分(最長)を削除 ${var%%/*} => ${var%%/*} => foo
表現 説明 例 (a,b,c)
${変数名/パターン/文字列} 最初のパターンマッチ部分を文字列に置換 ${var/,/;} => a;b,c
${変数名//パターン/文字列} 全部のパターンマッチ部分を文字列に置換 ${var//,/;} => a;b;c
  • shopt -s extglob でもっと複雑なパターンが使用可能
set -eu
process() {
echo exec "$@"
[ "a" = "b" ]
}
retry() {
i=0 max=5 wait=1
while ! "$@"; do
i=$((i+1))
[ "$i" -gt "$max" ] && return 1
echo "Retry $i/$max in ${wait}s" >&2
sleep $wait
done
}
if retry process test; then
echo ok
else
echo ng
fi
echo end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment