全力で怠けたい

怠けるために全力を尽くしたいブログ。

カレンダーを表示する cal コマンドのメモ。

カレンダーを表示する cal コマンドの使い方のメモ。

cal コマンドの使い方

カレンダーアプリがスマホにも Mac にも入ってるし Mac で作業中は現在日付がメニューバーに表示するしカレンダーを表示する cal コマンドを使うことはほとんどなさそうなんだけどちょいちょい使ってる気がするので使い方をメモしておく。 ちなみに cal コマンドとは別に ncal コマンドというのがあって ncal コマンドのほうが機能は豊富なんだけどそのへんの機能を使うくらいならカレンダーアプリを使うほうが便利だと思うのでこの期日では cal コマンドについてだけ書いていく。

この記事を書いた日付。

$ date
2020年 11月29日 日曜日 17時08分56秒 JST

インストール方法

Mac あるいはほとんどの Linux ディストリビューションは最初から使えると思う。たぶん。

基本的な使い方

オプションも引数も指定しないと現在月を表示する。

あとテキストにしちゃうと分からないけど現在日はハイライト表示していて分かりやすい。

$ cal
      11月 2020
日 月 火 水 木 金 土
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

年を指定すると指定した年のカレンダーを表示する。

$ cal 2021
                            2021
         1月                    2月                    3月
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
                1  2      1  2  3  4  5  6      1  2  3  4  5  6
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   7  8  9 10 11 12 13
10 11 12 13 14 15 16  14 15 16 17 18 19 20  14 15 16 17 18 19 20
17 18 19 20 21 22 23  21 22 23 24 25 26 27  21 22 23 24 25 26 27
24 25 26 27 28 29 30  28                    28 29 30 31
31

         4月                    5月                    6月
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
             1  2  3                     1         1  2  3  4  5
 4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12
11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19
18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26
25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30
                      30 31

         7月                    8月                    9月
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
             1  2  3   1  2  3  4  5  6  7            1  2  3  4
 4  5  6  7  8  9 10   8  9 10 11 12 13 14   5  6  7  8  9 10 11
11 12 13 14 15 16 17  15 16 17 18 19 20 21  12 13 14 15 16 17 18
18 19 20 21 22 23 24  22 23 24 25 26 27 28  19 20 21 22 23 24 25
25 26 27 28 29 30 31  29 30 31              26 27 28 29 30


        10月                   11月                   12月
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
                1  2      1  2  3  4  5  6            1  2  3  4
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   5  6  7  8  9 10 11
10 11 12 13 14 15 16  14 15 16 17 18 19 20  12 13 14 15 16 17 18
17 18 19 20 21 22 23  21 22 23 24 25 26 27  19 20 21 22 23 24 25
24 25 26 27 28 29 30  28 29 30              26 27 28 29 30 31
31

年月を指定すると指定した年月のカレンダーを表示する。

年月の指定は月が先で年は後に指定する。

$ cal 1 2021
      1月 2021
日 月 火 水 木 金 土
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

-A オプション: 現在月と現在月以降の月を指定月数分を表示する

-A オプションを指定すると現在月と現在月以降の月を指定月数分を表示する。

$ cal -A 2
      11月 2020              12月 2020              1月 2021
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
 1  2  3  4  5  6  7         1  2  3  4  5                  1  2
 8  9 10 11 12 13 14   6  7  8  9 10 11 12   3  4  5  6  7  8  9
15 16 17 18 19 20 21  13 14 15 16 17 18 19  10 11 12 13 14 15 16
22 23 24 25 26 27 28  20 21 22 23 24 25 26  17 18 19 20 21 22 23
29 30                 27 28 29 30 31        24 25 26 27 28 29 30
                                            31

-B オプション: 現在月と現在月以前の月を指定月数分を表示する

-B オプションを指定すると現在月と現在月以降の月を指定月数分を表示する。

$ cal -B 2
      9月 2020               10月 2020              11月 2020
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
       1  2  3  4  5               1  2  3   1  2  3  4  5  6  7
 6  7  8  9 10 11 12   4  5  6  7  8  9 10   8  9 10 11 12 13 14
13 14 15 16 17 18 19  11 12 13 14 15 16 17  15 16 17 18 19 20 21
20 21 22 23 24 25 26  18 19 20 21 22 23 24  22 23 24 25 26 27 28
27 28 29 30           25 26 27 28 29 30 31  29 30

-3 オプション: 現在月と前月と翌月を表示する

$ cal -3
                            2020
        10月                   11月                   12月
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
             1  2  3   1  2  3  4  5  6  7         1  2  3  4  5
 4  5  6  7  8  9 10   8  9 10 11 12 13 14   6  7  8  9 10 11 12
11 12 13 14 15 16 17  15 16 17 18 19 20 21  13 14 15 16 17 18 19
18 19 20 21 22 23 24  22 23 24 25 26 27 28  20 21 22 23 24 25 26
25 26 27 28 29 30 31  29 30                 27 28 29 30 31

-j オプション: 1月1日からの経過日数を表示する

-j オプションを指定すると1月1日からの経過日数を表示する。

$ cal -j
         11月 2020
 日  月  火  水  木  金  土
306 307 308 309 310 311 312
313 314 315 316 317 318 319
320 321 322 323 324 325 326
327 328 329 330 331 332 333
334 335

-j オプションはマニュアルにはユリウス通日を表示すると書いてあるけどユリウス通日は西暦 -4712年1月1日の正午からの日数だと思うので、現在年の1月1日からの経過日数を表示する -j オプションはユリウス通日とはちょっと違う気がするけど、実際のところはユリウス通日よりも現在年の1月1日からの経過日数を調べることが多い気がするので -j オプションの動きのほうが都合がよい気がする。

Display Julian days (days one-based, numbered from January 1)

今さらだけど git switch と git restore を使ってみたメモ。

git switchgit restore を少し使ってみたメモ。

git のバージョン。

$ git --version
git version 2.29.2

git switch と git restore

git switchgit restore はなんとなく雰囲気で使ってる気がするのでちょっとだけ気にして使ってみたメモ。

git switchgit restoregit checkout ほどじゃないけど git のサブコマンドだけあって結構いろんなことができるのだけど、そのへんを書いていくと書くことが多くなりそうなのでよく使いそうなやつを git checkout とかと比較しながら書いていく。

git checkout のよりよいインタフェースとしての git switch と git restore

Git 2.23 は git checkout を代替する試みとして実験的なコマンドの git switchgit restore が追加した。 git checkout はブランチをチェックアウトしたりブランチを作ったりといろんなことができるけどいろんなことができすぎて「なにをするコマンドかよく分からない」感があるかなという気がしてるけど、そのへんの「いろんなできること」が git switchgit restore に分けたら分かりやすくするのが目的のよう。

Git 2.23 brings a new pair of experimental commands to the suite of existing ones: git switch and git restore. These two are meant to eventually provide a better interface for the well-known git checkout. The new commands intend to each have a clear separation, neatly divvying up what the many responsibilities of git checkout, as we’ll show below.

git switch

git switch はブランチを切り替える。オプションで新しいブランチを作ることもできる。

git switch の使い方を書いていく。

ブランチを切り替える

こんな感じでブランチを切り替える。

$ git switch <branch>

git checkout はこんな感じで同じことができる。

$ git checkout <branch>

ブランチを作る

git switch-c オプションか --create オプションを指定するとブランチを作る。

$ git switch --create <new-branch>

git checkout はこんな感じで同じことができる。

$ git checkout -b <new-branch>

git branchgit switch を組み合わせるとこんな感じで同じことができる。

$ git branch <new-branch>
$ git switch <new-branch>

強制的にブランチを作る

-c オプションと --create オプションは指定したブランチがすでに存在してると失敗するけど -C オプションか --force-create オプションは指定したブランチがすでに存在していると強制的にブランチを作り直す。

$ git switch --force-create <new-branch>

git branchgit switch を組み合わせるとこんな感じで同じことができる。

$ git branch --force <new-branch>
$ git switch <new-branch>

マニュアルを表示する

git help switch すると git switch のマニュアルを表示する。

$ git help switch

GIT-SWITCH(1)                                Git Manual                               GIT-SWITCH(1)

NAME
       git-switch - Switch branches

SYNOPSIS
       git switch [<options>] [--no-guess] <branch>
       git switch [<options>] --detach [<start-point>]
       git switch [<options>] (-c|-C) <new-branch> [<start-point>]
       git switch [<options>] --orphan <new-branch>

# 省略

git restore

git restore はワーキングツリー (作業ディレクトリ) の変更を戻す。

git restore の使い方を書いていく。

ワーキングツリーの変更を戻す

-W オプションか --worktree オプションを指定するとワーキングツリーつまりファイルの変更を git add する前の変更を取り消して変更前の状態に戻す。

$ git restore --worktree <pathspec>

実際に使ってみるとこんな感じ。

$ git status
On branch main
nothing to commit, working tree clean

$ echo hoge > README.md
$ git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

$ git restore README.md
$ git status
On branch main
nothing to commit, working tree clean

git checkout はこんな感じで同じことができる。

$ git checkout <pathspec>

ちなみに -W オプションまたは --worktree オプションと後述する -S オプションまたは --staged のどちらも指定しないときは --worktree を指定するのと同じ動作になる。 つまり次の2つのコマンドは同じ動きになる。

$ git restore --worktree <pathspec>
$ git restore <pathspec>

インデックスの変更を戻す

-S オプションか --staged オプションを指定するとインデックスつまりファイルの変更を git add した分を git add する前の状態に戻す。

$ git restore --staged <pathspec>

実際に使ってみるとこんな感じ。

$ git status
On branch main
nothing to commit, working tree clean

$ echo hoge > README.md
$ git add README.md
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   README.md
$ git diff

$ git restore --staged README.md
$ git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md
$ git diff
diff --git a/README.md b/README.md
index 0abf9a4..2262de0 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-GOOD!
+hoge

git reset はこんな感じで同じことができる。

$ git reset README.md

ワーキングツリーとインデックスの変更を戻す

--worktree オプションと --staged オプションを両方指定するとワーキングツリーの変更とインデックスに追加したファイルの変更を取り消して変更前の状態に戻す。

$ git restore --worktree --staged <pathspec>
$ git st
On branch main
nothing to commit, working tree clean

$ echo hoge > README.md
$ git add README.md
$ echo fuga > README.md
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

$ git restore --worktree --staged README.md
$ git status

git resetgit checkout はこんな感じで同じことができる。

$ git reset README.md
$ git checkout README.md

任意のコミットに戻す

-s オプションか --source オプションを指定するとワーキングツリーを任意のコミットに戻すことができる。

任意のコミットに戻すとワーキングツリーの変更内容はインデックス追加する前つまり git add する前の状態になる。

$ cat README.md
GOOD!

$ git checkout fbda5d9 2>&1 > /dev/null
$ cat README.md
HELLO

$ git switch main
Previous HEAD position was fbda5d9 hello
Switched to branch 'main'

$ git restore --source fbda5d9 README.md
$ cat README.md
HELLO

$ git diff
diff --git a/README.md b/README.md
index 0abf9a4..e427984 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-GOOD!
+HELLO

git checkoutgit reset はこんな感じで同じことができる。 git checkout は任意のコミットに戻すとワーキングツリーの変更内容はインデックス追加した後つまり git add した後の状態になるので git reset でインデックスに追加した内容をワーキングツリーに戻す。

$ git checkout <commit> <pathspec>
$ git reset <pathspec>

ちなみに --source を指定しないときは HEAD に戻すつまり以下の2つは同じ動きになる。

$ git restore <commit> <pathspec>
$ git restore --source HEAD <pathspec>

マニュアルを表示する

git help restore すると git restore のマニュアルを表示する。

$ git help restore

GIT-RESTORE(1)                               Git Manual                              GIT-RESTORE(1)

NAME
       git-restore - Restore working tree files

SYNOPSIS
       git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...
       git restore [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
       git restore (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>...]

# 省略

参考サイト

シェル変数を読込専用にするメモ。

シェル変数を読込専用にするやり方のメモ。

シェル変数を読込専用にする

readonly コマンドを実行するとシェル変数を読込専用にすることができるのでそのへんをメモしておく。

readonly コマンドは sh で実行することができる。

readonly コマンドでシェル変数を読込専用にする

readonly コマンドで読込専用にしたシェル変数は値を代入するとエラーになる。

$ (
  HOGE=ほげ
  readonly HOGE
  HOGE=ふが
)
zsh: read-only variable: HOGE

readonly コマンドで読込専用にしたシェル変数は unset もできなくなる。

$ (
  HOGE=ほげ
  readonly HOGE
  unset HOGE
)
zsh: read-only variable: HOGE

複数のシェル変数を同時に読込専用にすることもできる。

$ (
  HOGE=ほげ
  FUGA=ふが
  readonly HOGE FUGA
)

readonly コマンドは引数なしで実行すると読込専用に設定しているシェル変数の一覧を表示する。

$ readonly
'!'=0
'#'=0
'$'=82181
'*'=(  )
# 省略

シェルのあんまり使わないパラメータ展開のメモ。

シェルのあんまり使わないパラメータ展開のやり方のメモ。

わりとよく使うシェルのパラメータ展開は こっち

シェルのあんまり使わないパラメータ展開のメモ

シェルはパラメータ展開という機能があってシェルスクリプトを書くときはわりとよく使うけど、たまにしか使わなすぎて使い方をすぐに忘れるやつをメモしておく。 bash はこのページに書いてるのは基本的に動く。

${#パラメータ}: 文字列の長さを求める

${#パラメータ} はパラメータの文字列の長さを求めてその値に展開する。

${#パラメータ}bash は使えるけど sh だと使えたり使えなかったりするのと同じことは wc コマンドでできるのでほとんど使わないような気がする。

こんな感じに使う。マルチバイト文字の長さもちゃんと求められる。

$ (
  HOGE=hoge
  echo ${#HOGE}
  )
4

$ (
  HOGE=ほげ
  echo ${#HOGE}
)
2

wc コマンドを wc -m みたいに使うとこんな感じ。

$ (
HOGE=hoge
echo -n ${HOGE} | wc -m
)
       4

$ (
HOGE=ほげ
echo -n ${HOGE} | wc -m
)
       2

${パラメータ#パターン}: パラメータの値の先頭から パターン に一致する最短の部分を取り除く

${パラメータ#パターン} はパラメータの値の先頭から パターン に一致する最短の部分を取り除いてその値に展開する。

${パラメータ#パターン}bash は使えるけど sh だと使えたり使えなかったりするのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE=hoge
  echo "${HOGE#ho}"
)
ge

パターン はパス名展開の特殊文字が使える。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE#*.}"
)
tar.gz

sed コマンドを使うとこんな感じ。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE}" | sed 's/^.*\.//'
)
gz

${パラメータ##パターン}: パラメータの値の先頭から パターン に一致する最長の部分を取り除く

${パラメータ##パターン} はパラメータの値の先頭から パターン に一致する最長の部分を取り除いてその値に展開する。

${パラメータ##パターン}bash は使えるけど sh だと使えたり使えなかったりするのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE=hoge
  echo "${HOGE##ho}"
)
ge

パターン はパス名展開の特殊文字が使える。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE##*.}"
)
gz

sed コマンドを使うとこんな感じ。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE}" | sed 's/^.*\.//'
)
gz

${パラメータ%パターン}: パラメータの値の末尾から パターン に一致する最短の部分を取り除く

${パラメータ%パターン} はパラメータの値の末尾から パターン に一致する最短の部分を取り除いてその値の展開する。

${パラメータ%パターン}bash は使えるけど sh だと使えたり使えなかったりするのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE=hoge
  echo "${HOGE%ge}"
)
ho

パターン はパス名展開の特殊文字が使える。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE%.*}"
)
hoge.tar

sed コマンドを使うとこんな感じ。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE}" | sed 's/\.[^.]*$//'
)
hoge.tar

${パラメータ%%パターン}: パラメータの値の末尾から パターン に一致する最長の部分を取り除く

${パラメータ%%パターン} はパラメータの値の末尾から パターン に一致する最長の部分を取り除いてそのその値の展開する。

${パラメータ%%パターン}bash は使えるけど sh だと使えたり使えなかったりするのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE=hoge
  echo "${HOGE%%ge}"
)
ho

パターン はパス名展開の特殊文字が使える。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE%%.*}"
)
hoge

sed コマンドを使うとこんな感じ。

$ (
  HOGE=hoge.tar.gz
  echo "${HOGE}" | sed 's/\..*//'
)
hoge

${パラメータ:オフセット}: パラメータの値の先頭から オフセット 個の文字を取り除く

${パラメータ:オフセット} はパラメータの値の先頭から オフセット 個の文字を取り除いてその値に展開する。

${パラメータ:オフセット}bash は使えるけど sh だと使えないのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE=hoge
  echo "${HOGE:2}"
)
ge

sed コマンドを使うとこんな感じ。

$ (
  HOGE=hoge
  echo "${HOGE}" | sed -E 's/^.{2}//'
)
ge

${パラメータ:オフセット:長さ}: : パラメータの値の先頭から オフセット 個の文字を取り除いてさらに最大で長さ個の文字列に展開する

${パラメータ:オフセット:長さ} はパラメータの値の先頭から オフセット 個の文字を取り除いてさらに最大で 長さ 個の文字列に展開する。

${パラメータ:オフセット:長さ}bash は使えるけど sh だと使えないのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE=hoge
  echo "${HOGE:2:1}"
)
g

sed コマンドを使うとこんな感じ。

$ (
  HOGE=hoge
  echo "${HOGE}" | sed -E -e 's/^.{2}//' -e 's/^(.{1}).*$/\1/'
)
g

${パラメータ/パターン/置換文字列}: パラメータの値の先頭から最初に パターン に一致する文字列の部分を 置換文字列 に置換する

${パラメータ/パターン/置換文字列} はパラメータの値の先頭から最初に パターン に一致する文字列の部分を 置換文字列 に置換してその値に展開する。 パターン はパス名展開の特殊文字が使える。

${パラメータ/パターン/置換文字列}bash は使えるけど sh だと使えないのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE="hoge hoge hoge"
  echo "${HOGE/hoge/fuga}"
)
fuga hoge hoge

sed コマンドを使うとこんな感じ。

$ (
  HOGE="hoge hoge hoge"
  echo "${HOGE}" | sed 's/hoge/fuga/'
)
fuga hoge hoge

${パラメータ//パターン/置換文字列}: パラメータの値の パターン に一致するすべての文字列の部分を 置換文字列 に置換する

${パラメータ/パターン//置換文字列} はパラメータの値の パターン に一致するすべての文字列の部分を 置換文字列 に置換してその値に展開する。 パターン はパス名展開の特殊文字が使える。

${パラメータ/パターン/置換文字列}bash は使えるけど sh だと使えないのと同じことは sed コマンドでできるのでほとんど使わないような気がする。

$ (
  HOGE="hoge hoge hoge"
  echo "${HOGE//hoge/fuga}"
)
fuga fuga fuga

sed コマンドを使うとこんな感じ。

$ (
  HOGE="hoge hoge hoge"
  echo "${HOGE}" | sed 's/hoge/fuga/g'
)
fuga fuga fuga

${!パラメータ}: パラメータの値をパラメータ名とみなしてさらにその値に展開する

${!パラメータ} はパラメータの値をパラメータ名とみなしてさらにその値に展開する。

${!パラメータ}bash は使えるけど sh だと使えない実装が多いのと同じことは eval コマンドでできるのでほとんど使わないような気がする。

$ (
  hoge=ほげ
  HOGE=hoge
  echo "${!HOGE}"
)
ほげ

eval コマンドを使うとこんな感じ。

$ (
  hoge=ほげ
  HOGE=hoge
  eval echo \"\$${HOGE}\"
)
ほげ

Pixela の唯一の非公式 CLI ツール pa が v1.3.0 にバージョンアップしました。

Pixela の CLI ツール pav1.3.0 v1.3.1 にバージョンアップしました。

v1.3.1 アップデート内容

User Profile API に対応

Pixela v1.20.0 で追加された User Profile API に対応して profile サブコマンドが追加しています。 User Profile API の説明と使い方に関しては リリースノート にとても詳しく書かれているのでぜひ参照してみてください。

一応、ユーザープロフィールページを更新するコマンドの例は以下のようになります。 オプション名が長いですが入力補完が効くのでサクサク入力できますよ!

$ pa profile update \
    --display-name=display-name \
    --gravatar-icon-email=gravatar-icon-email \
    --title=title \
    --timezone=Asia/Tokyo \
    --about-url=about-URL \
    --contribute-urls=url \
    --pinned-graph-id=pinned-graph-id

現場からは以上です。

pixela4go が v1.2.0 にバージョンアップしました。

pixela4go が v1.2.0 にバージョンアップしました。

v1.2.0 アップデート内容

User Profile API に対応

Pixela v1.20.0 で追加された User Profile API に対応しています。 User Profile API の説明と使い方に関しては リリースノート にとても詳しく書かれているのでぜひ参照してみてください。

一応、ユーザープロフィールページを更新するコードの例は以下のようになります。

client := pixela.New("YOUR_NAME", "YOUR_TOKEN")

upi := &pixela.UserProfileUpdateInput{
    DisplayName:       pixela.String("display-name"),
    GravatarIconEmail: pixela.String("gravatar-icon-email"),
    Title:             pixela.String("title"),
    Timezone:          pixela.String("Asia/Tokyo"),
    AboutURL:          pixela.String("https://github.com/ebc-2in2crc"),
    ContributeURLs:    []string{},
    PinnedGraphID:     pixela.String("pinned-graph-id"),
}
result, err = client.UserProfile().Update(upi)
if err != nil {
    log.Fatal(err)
}
if result.IsSuccess == false {
    log.Fatal(result.Message)
}

現場からは以上です。

シェルのパラメータ展開のメモ。

シェルのパラメータ展開のやり方のメモ。

あまり使わないシェルのパラメータ展開は こっち

シェルのパラメータ展開のメモ

シェルはパラメータ展開という機能があってシェルスクリプトを書くときはわりとよく使うので、わりとよく使うやつとあとそんなに使わないやつもメモしておく。 bash はこのページに書いてるのは基本的に動く。

${パラメータ:-値}: デフォルト値の指定 - 1

${パラメータ:-値} はパラメータが設定されているときはパラメータ自身の値に展開して、パラメータが設定されていないかパラメータが空文字列のときは指定した に展開する。

$ (
  HOGE=hoge
  echo "*${HOGE:-ほげ}*"
)
*hoge*

$ (
  echo "*${HOGE:-ほげ}*"
)
*ほげ*

$ (
  HOGE=
  echo "*${HOGE:-ほげ}*"
)
*ほげ*

${パラメータ:-値} は if 文で記述するとこんな感じになる。

$ (
  if [ -n "${HOGE}" ]; then
    echo "*${HOGE}*"
  else
    echo "*ほげ*"
  fi
)
*ほげ*

${パラメータ-値}: デフォルト値の指定 - 2

${パラメータ-値} はパラメータが設定されているときはパラメータ自身の値に展開して、パラメータが設定されていないときは指定した に展開する。

$ (
  HOGE=hoge
  echo "*${HOGE-ほげ}*"
)
*hoge*

$ (
  echo "*${HOGE-ほげ}*"
)
*ほげ*

$ (
  HOGE=
  echo "*${HOGE-ほげ}*"
)
**

${パラメータ:=値}: デフォルト値を代入する - 1

${パラメータ:=値} はパラメータが設定されているときはパラメータ自身の値に展開して、パラメータが設定されていないかパラメータが空文字列のときは指定した がパラメータに代入してその値に展開する。

$ (
  HOGE=hoge
  : ${HOGE:=ほげ}
  echo "*${HOGE}*"
)
*hoge*

$ (
   : ${HOGE:=ほげ}
   echo "*${HOGE}*"
)
*ほげ*

$ (
  HOGE=
  : ${HOGE:=ほげ}
  echo "*${HOGE}*"
)
*ほげ*

${パラメータ:=値} は if 文で記述するとこんな感じになる。

$ (
  if [ -z "${HOGE}" ]; then
    HOGE="ほげ"
  fi
  echo "*${HOGE}*"
)
*ほげ*

${パラメータ=値}: デフォルト値を代入する - 2

${パラメータ=値} はパラメータが設定されているときはパラメータ自身の値に展開して、パラメータが設定されていないときは指定した がパラメータに代入してその値に展開する。

$ (
  HOGE=hoge
  : ${HOGE=ほげ}
  echo "*${HOGE}*"
)
*hoge*

$ (
  : ${HOGE=ほげ}
  echo "*${HOGE}*"
)
*ほげ*

$ (
  HOGE=
  : ${HOGE=ほげ}
  echo "*${HOGE}*"
)
**

${パラメータ:+値}: パラメータが指定されている場合は指定の値に展開する - 1

${パラメータ:+値} はパラメータが空文字列以外のときは指定した に展開して、それ以外のときは空文字列に展開する。 パラメータにもともと設定している値は展開の結果には出てこない。

$ (
  HOGE=hoge
  HOGE_VALUE="${HOGE:+HOGE は値が設定されています}"
  echo "*${HOGE_VALUE}*"
)
*HOGE は値が設定されています*

$ (
  HOGE_VALUE="${HOGE:+HOGE は値が設定されています}"
  echo "*${HOGE_VALUE}*"
)
**

${パラメータ:+値} の使いどころはあまりなさそうだけどパスを既存のパスに追加するようなときはこんな感じに使えて便利。

複数のパスを指定するときは : で区切るけど MY_PATH パラメータがすでに指定されているときは : に展開して MY_PATH パラメータが指定されていないときは : は展開しない、ということができる。

$ (
  MY_PATH=/path/to/hoge
  MY_PATH="/usr/local/myapp/bin${MY_PATH:+:}${MY_PATH}"
  echo "${MY_PATH}"
)
/usr/local/myapp/bin:/path/to/hoge

$ (
  MY_PATH="/usr/local/myapp/bin${MY_PATH:+:}${MY_PATH}"
  echo "${MY_PATH}"
)
/usr/local/myapp/bin

${パラメータ:+値} は使わないで単純にこんな感じに書くと MY_PATH パラメータが指定されていないときに MY_PATH パラメータの右端に余分な : が付いちゃう。

$ (
  MY_PATH="/usr/local/myapp/bin:${MY_PATH}"
  echo "${MY_PATH}"
)
/usr/local/myapp/bin:

${パラメータ+値}: パラメータが指定されている場合のみ指定の値に展開する - 2

${パラメータ+値} はパラメータが指定されているときは指定した に展開して、それ以外のときは空文字列に展開する。 パラメータにもともと設定している値は展開の結果には出てこない。

$ (
  MY_PATH=/path/to/hoge
  MY_PATH="/usr/local/myapp/bin${MY_PATH+:}${MY_PATH}"
  echo "${MY_PATH}"
)
/usr/local/myapp/bin:/path/to/hoge

$ (
  MY_PATH=
  MY_PATH="/usr/local/myapp/bin${MY_PATH+:}${MY_PATH}"
  echo "${MY_PATH}"
)
/usr/local/myapp/bin:

$ (
  MY_PATH="/usr/local/myapp/bin${MY_PATH+:}${MY_PATH}"
  echo "${MY_PATH}"
)
/usr/local/myapp/bin

${パラメータ:?値}: パラメータ未設定時にエラーメッセージを出してシェルスクリプトを終了する - 1

${パラメータ:-値} はパラメータが設定されているときはパラメータ自身の値に展開して、パラメータが設定されていないかパラメータが空文字列のときは指定した がエラーメッセージとして表示してシェルスクリプトが終了する。 シェルスクリプトじゃなくてシェル上から直接実行しているときはシェルは終了しない。

${パラメータ:-値} は必須パラメータのチェックとかに使ってる気がする。

$ (
  MY_PATH=/usr/local/myapp/bin
  echo "*${MY_PATH:?MY_PATH を指定してください}*"
)
*/usr/local/myapp/bin*

$ (
  echo "*${MY_PATH:?MY_PATH を指定してください}*"
)
zsh: MY_PATH: MY_PATH を指定してください

$ (
  MY_PATH=
  echo "*${MY_PATH:?MY_PATH を指定してください}*"
)
zsh: MY_PATH: MY_PATH を指定してください

${パラメータ:?値} は if 文で記述するとこんな感じになる。

if [ -z "${MY_PATH}" ]; then
  echo "MY_PATH を指定してください"
  exit 1
fi

${パラメータ:?値} を省略するとシェルがデフォルトのエラーメッセージをこんな感じに表示する。

$ (
  echo "*${MY_PATH:?}*"
)
zsh: MY_PATH: parameter not set

${パラメータ?値}: パラメータ未設定時にエラーメッセージを出してシェルスクリプトを終了する - 2

${パラメータ:-値} はパラメータが設定されているときはパラメータ自身の値に展開して、パラメータが設定されていないときは指定した がエラーメッセージとして表示してシェルスクリプトが終了する。

$ (
  MY_PATH=/usr/local/myapp/bin
  echo "*${MY_PATH?MY_PATH を指定してください}*"
)
*/usr/local/myapp/bin*

$ (
  echo "*${MY_PATH?MY_PATH を指定してください}*"
)
zsh: MY_PATH: MY_PATH を指定してください

$ (
  MY_PATH=
  echo "*${MY_PATH?MY_PATH を指定してください}*"
)
**