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

echoで改行を反映させ正しくエンコードする

$
0
0
はじめに echoコマンドを使って改行を含む文字列をエンコード/デコードした際、正しく復元できない状態に陥りました。 原因はエンコードする際にエスケープ文字を認識してくれないという点にあり、調べたところ、-e というオプションを加えることで、エスケープ文字を認識できるということが分かりました。 結論 echoコマンドにオプション -e をつけることでエスケープ文字(\n: 改行,\t: タブ 等)が有効になる $ echo -e "Hello\nWorld" => Hello World 環境 macOS Catalina 10.15.5 bash 出力の確認 「-e」なしの場合 -eのオプションを追加しないと 「\n」がエスケープ文字ではなく単純な文字として認識され改行が反映されません。 $ echo "Hello\nWorld" => Hello\eWorld 「-e」ありの場合 すると、「\n」がエスケープ文字として認識され正しく出力されることが分かります。 $ echo -e "Hello\nWorld" => Hello World ダブルクォーテーション("")なしの場合 ""をつけない場合は「\n」ではなく 「\\n」 をつけないと認識してくれません。 $ echo -e Hello\nWorld => HellonWorld $ echo -e Hello\\nWorld => Hello World エンコードしてみる 「-e」オプションでエスケープ文字が有効になり改行が反映されるようになったので実際にエンコードしてみます。 エンコード/デコードはbase64コマンドにより実行できます。 # エンコード echo "文字列" | base64 #デコード echo "文字列" | base64 -D (--decode) ※ base64コマンドはGNU coreutilsと呼ばれるパッケージ(echo, cat, ls 等のUNIX系のOSで使われることが多い基本的なコマンドが格納されている)に含まれているそうです。 「-e」なしの場合 改行が反映されないので復元した結果も改行されていません。 # エンコード $ echo "Hello\nWorld" | base64 => SGVsbG9cbldvcmxkCg== # デコード $ echo "SGVsbG9cbldvcmxkCg==" | base64 -D => Hello\nWorld 「-e」ありの場合 改行が反映され正しく復元できていることが分かります。 # エンコード $ echo -e "Hello\nWorld" | base64 => SGVsbG8KV29ybGQK # デコード $ echo "SGVsbG9cbldvcmxkCg==" | base64 -D => Hello World

Viewing all articles
Browse latest Browse all 2832

Latest Images

Trending Articles