base64のエンコード結果がターミナルとシェルスクリプトで違ってた件
|
ちょっとした確認用にシェルスクリプトを書いていたのですが、base64 でエンコードした結果がターミナルと shellscript で異なっていてハマりました。もう同じ轍は踏まねーぜ。
事象の説明
ターミナルで base64 エンコードするコマンドを実行した場合、下記のような結果になります。
# ↓実行コマンド
$ echo -n "hoge" | base64
# ↓出力結果
aG9nZQ==
一方、shellscript で実行した結果が下記です。
#!/bin/bash
echo -n "hoge" | base64
# ↓出力結果
LW4gaG9nZQo=
ターミナルと shellscript で結果が違う 🥺
解決策
echo
の代わりに printf
を使います。
#!/bin/bash
printf "hoge" | base64
# ↓出力結果
aG9nZQ==
同じになりました 😊
echo はバージョンや shellscript の行頭で指定する shebang(!/bin/bash とか!/bin/sh)に依存して挙動が異なるようです。
まとめ
shellscript では echo の代わりに printf を使うと良いです。