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を使うと良いです。