Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2912

シェルスクリプトで環境変数の値をファイルに出力する際の注意点(echo $hogeとecho "$hoge"の違い)

$
0
0

はじめに

CI/CDパイプラインを組んでいて、ライセンスファイルの中身をGitHubでいうところのSecretsに置き、echo 環境変数 > ライセンスファイルでファイルを生成することがあると思います。

そこで認証が上手くいかなかった場合、真っ先に認証方法のミスを疑いドキュメントを見直したりしますが、意外にも原因はライセンスファイルの生成方法自体だったりします。

これに自分も何度かハマったことがあり、その度に共有しようと思うものの忘れてしまうので、今回忘れる前に投稿したいと思います。

echo $hogeecho "$hoge"の違い

変数の値をファイルに出力したい場合、echo $hogeecho "$hoge"の違いを理解しておかないと、想定と違った動作を見せることがあります。

具体的に見ていきましょう。

echo $hogeの場合

hoge.yaml
a:-b:hoge
$ hoge=$(cat hoge.yaml)# hoge.yamlは上記のもの$ echo$hoge
a: - b: hoge # 改行が消える

echo $hogeの場合だと、変数内に含まれる改行やタブはスペースに変換されてしまいます。

この挙動により、例えばライセンスファイルを生成しようとすると、改行なしのファイルが生成されてしまい、正しく認証されなくなってしまいます。

変数の値に含まれる改行も一緒に出力したい場合は、変数をダブルクオーテーションで囲う必要があります。

echo "$hoge"の場合

$ hoge=$(cat hoge.yaml)# hoge.yamlは先ほどのものと同じ$ echo"$hoge"
a:
  - b: hoge

まとめ

APIキーやbase64エンコードしたものなど改行が含まれないものをSecretsに置くことが多いので、たまにこういったことをやろうとすると、うっかりハマってしまうことがあります。

記事にすることで、ハマらなくなったり、ハマってもすぐに気づけるようになれると嬉しいです。

GitHub: @yukiarrr
Twitter: @yukiarrr


Viewing all articles
Browse latest Browse all 2912

Trending Articles