Open1
shellでの記法について
書いてないと忘れるので、メモとして
変数
代入は=
で$
をつけて参照できる。以下の場合適当な文字列
というのが出力される
var=適当な文字列
echo $var
文字列に埋め込み
ダブルクオートで埋め込みをするほうが良い気がしている(個人的な感想で、別にそうしなくてもいい)
var=適当な文字列
echo "varは$varです"
この場合 varは??す
になる。多分埋め込みはできるが、文字列として表示する際にマルチバイトなのかがわからんということな気がする。(これ以上はechoの話なので割愛)
マルチバイト文字でなければ普通に問題はない。
var=test
echo "varは$varです"
この場合 varはtestです
になる。んじゃあどうするかってと{}
でくくると良い。
var=適当な文字列
echo "varは${var}です"
その変数がなかった場合は何もなかったかのように無視される。以下の場合varはです
になる
var=適当な文字列
echo "varは${var1}です"
シングルクオートの場合は本当に文字列として認識するので以下の場合は varは${var}です
になる
var=適当な文字列
echo 'varは${var}です'
じゃあjson文字列とかどうする(jq使えばいいじゃんは一旦置いておき)。
よくあるslack通知。
var=適当な文字列
curl -X POST -w '\n' -H "Content-Type: application/json" -d '{ "channel": "#my_channel", "text": "varは${var}です" }' "https://hooks.slack.com/services/hogehoge"
シングルクオートでやるとダブルクオート入れられるから楽だなーと思いつつも、変数埋め込みしたい場合シングルクオートの場合はもちろん文字列として認識されるのでだめ、、、
じゃあ、中のダブルクオートをエスケープするかー、って考えるのはめんどい。って見てたときに以下のエントリにてヒアドキュメントを渡すパターンを見つけた
ちょっと見やすいように順番変えて
var=適当な文字列
curl -X POST "https://hooks.slack.com/services/hogehoge" -w '\n' -H "Content-Type: application/json" -d @- <<EOS
{
"channel": "#my_channel",
"text": "varは${var}です"
}
EOS
とてもいい感じ