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

コメントを残す

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.